fix dynamic export
This commit is contained in:
parent
bfa5ee8d74
commit
ec54636257
@ -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
|
||||
|
||||
|
||||
@ -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.")
|
||||
|
||||
Loading…
Reference in New Issue
Block a user