fix dynamic export

This commit is contained in:
edo-neo 2024-10-25 11:34:25 +02:00
parent bfa5ee8d74
commit ec54636257
2 changed files with 41 additions and 65 deletions

View File

@ -25,7 +25,7 @@ class Recipes(BaseModel):
def get_steps_map(self):
steps = {}
for step_name, step_pk in self.spec.get("available_steps", {}).items():
for step_name, step_pk in self.spec.get("steps", {}).items():
steps[step_name] = Step(step_type=step_name,spec=self.spec["steps"][step_name])
return steps

View File

@ -374,55 +374,7 @@ class Recipe_Selection(Widget):
barcode_serial_field = self.config.get("recipe", {}).get("barcode_serial_field", "codice_a_barre").strip()
print_template_field = self.config.get("recipe", {}).get("label_template_field", "modello_etichetta").strip()
data = []
fieldnames = [
recipe_name_field,
"cliente",
"part_number",
"dimensione_lotto_abilitata",
"dimensione_lotto",
"verifica_connettore_abilitata",
"connettore",
barcode_enable_field,
barcode_serial_field,
"verifica_resistenza_connettore_abilitata",
"scala_resistenza",
"r nominale",
"tolleranza_resistenza_pos",
"tolleranza_resistenza_neg",
"avvitatura_abilitata",
"viti",
"prova_tenuta_abilitata",
"tempo_pre_riempimento",
"pressione_pre_riempimento",
"tempo_riempimento",
"tempo_assestamento",
"percentuale_minima_pressione_assestamento",
"percentuale_massima_pressione_assestamento",
"tempo_di_test",
"pressione_di_test_delta_minimo",
"pressione_di_test",
"pressione_di_test_delta_massimo",
"tempo_svuotamento",
"pressione_svuotamento",
"prova_tenuta_abilitata_2",
"tempo_pre_riempimento_2",
"pressione_pre_riempimento_2",
"tempo_riempimento_2",
"tempo_assestamento_2",
"percentuale_minima_pressione_assestamento_2",
"percentuale_massima_pressione_assestamento_2",
"tempo_di_test_2",
"pressione_di_test_delta_minimo_2",
"pressione_di_test_2",
"pressione_di_test_delta_massimo_2",
"tempo_svuotamento_2",
"pressione_svuotamento_2",
"test_visione_abilitato",
"ricetta_visione",
"stampa_etichetta_abilitata",
print_template_field,
"etichette_supplementari",
]
fieldnames = set() # Use a set to avoid duplicates
for recipe in list(Recipes.select()):
steps = recipe.get_steps_map()
exportable = {
@ -432,15 +384,18 @@ class Recipe_Selection(Widget):
"part_number": recipe.part_number,
}
# Check and add fields conditionally for each section
# Add base fields to the fieldnames
fieldnames.update([recipe_name_field, "cliente", "part_number"])
# MULTICOMP SECTION
if recipe.spec.get("connector"):
# Check and add fields conditionally for each section
if "connector" in steps:
exportable.update({
"verifica_connettore_abilitata": "x",
"connettore": steps["connector"].spec["connector"]
})
if recipe.spec.get("resistance"):
fieldnames.update(["verifica_connettore_abilitata", "connettore"])
if "resistance" in steps:
exportable.update({
"verifica_resistenza_connettore_abilitata": "x",
"scala_resistenza": steps["resistance"].spec["scale"],
@ -448,21 +403,24 @@ class Recipe_Selection(Widget):
"tolleranza_resistenza_pos": steps["resistance"].spec["tolerance_pos"],
"tolleranza_resistenza_neg": steps["resistance"].spec["tolerance_neg"]
})
fieldnames.update(["verifica_resistenza_connettore_abilitata", "scala_resistenza", "r nominale",
"tolleranza_resistenza_pos", "tolleranza_resistenza_neg"])
# BARCODE SECTION
if recipe.spec.get("barcodes"):
if "barcodes" in steps:
exportable.update({
barcode_enable_field: "x",
barcode_serial_field: steps["barcodes"].spec["serial"]
})
if recipe.spec.get("screws"):
fieldnames.update([barcode_enable_field, barcode_serial_field])
if recipe.spec.get("steps", {}).get("screws") and "screws" in steps:
exportable.update({
"avvitatura_abilitata": "x",
"viti": steps["screws"].spec["quantity"]
})
fieldnames.update(["avvitatura_abilitata", "viti"])
# TECNA SECTION
if recipe.spec.get("leak_1"):
if "leak_1" in steps:
exportable.update({
"prova_tenuta_abilitata": "x",
"tempo_pre_riempimento": steps["leak_1"].spec["pre_filling_time"],
@ -478,7 +436,15 @@ class Recipe_Selection(Widget):
"tempo_svuotamento": steps["leak_1"].spec["flush_time"],
"pressione_svuotamento": steps["leak_1"].spec["flush_pressure"],
})
if recipe.spec.get("leak_2"):
fieldnames.update(["prova_tenuta_abilitata", "tempo_pre_riempimento", "pressione_pre_riempimento",
"tempo_riempimento", "tempo_assestamento",
"percentuale_minima_pressione_assestamento",
"percentuale_massima_pressione_assestamento", "tempo_di_test",
"pressione_di_test_delta_minimo",
"pressione_di_test", "pressione_di_test_delta_massimo", "tempo_svuotamento",
"pressione_svuotamento"])
if "leak_2" in steps:
exportable.update({
"prova_tenuta_abilitata_2": "x",
"tempo_pre_riempimento_2": steps["leak_2"].spec["pre_filling_time"],
@ -496,30 +462,40 @@ class Recipe_Selection(Widget):
"tempo_svuotamento_2": steps["leak_2"].spec["flush_time"],
"pressione_svuotamento_2": steps["leak_2"].spec["flush_pressure"],
})
fieldnames.update(["prova_tenuta_abilitata_2", "tempo_pre_riempimento_2", "pressione_pre_riempimento_2",
"tempo_riempimento_2", "tempo_assestamento_2",
"percentuale_minima_pressione_assestamento_2",
"percentuale_massima_pressione_assestamento_2", "tempo_di_test_2",
"pressione_di_test_delta_minimo_2", "pressione_di_test_2",
"pressione_di_test_delta_massimo_2",
"tempo_svuotamento_2", "pressione_svuotamento_2"])
# VISION SECTION
if recipe.spec.get("vision"):
if "vision" in steps:
exportable.update({
"test_visione_abilitato": recipe.spec["vision"],
"ricetta_visione": steps["vision"].spec["recipe"]
})
fieldnames.update(["test_visione_abilitato", "ricetta_visione"])
# PRINT SECTION
if recipe.spec.get("print"):
if "print" in steps:
exportable.update({
"stampa_etichetta_abilitata": "x",
print_template_field: steps["print"].spec["template"],
"etichette_supplementari": steps["print"].spec["extra_label"]
})
fieldnames.update(["stampa_etichetta_abilitata", print_template_field, "etichette_supplementari"])
# Append the exportable dictionary to the data list
data.append(exportable)
# Convert the set to a list for CSV writing
fieldnames = list(fieldnames)
# Export to CSV if there is data
if len(data):
self.log.info(f"recipes: exporting recipes to {csv_path}")
with open(csv_path, "w", newline="") as f:
w = csv.DictWriter(f, fieldnames=exportable.keys(), extrasaction="ignore")
w = csv.DictWriter(f, fieldnames=fieldnames, extrasaction="ignore")
w.writeheader()
w.writerows(data)
self.log.info(f"recipes: exported {len(data)} rows.")