This commit is contained in:
matteo porta 2022-09-27 14:09:43 +02:00
parent 3b55cde7e5
commit 2e7e1a015b
17 changed files with 75 additions and 59 deletions

View File

@ -1,2 +1,2 @@
codice_ricetta,cliente,part_number,verifica_connettore_abilitata,connettore,verifica_codice_a_barre_abilitata,codice_a_barre,verifica_resistenza_connettore_abilitata,scala_resistenza,resistenza_attesa,tolleranza_resistenza,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_svuotmento,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_svuotmento_2,test_visione_abilitato,ricetta_visione,stampa_etichetta_abilitata,modello_etichetta codice_ricetta,cliente,part_number,verifica_connettore_abilitata,connettore,verifica_codice_a_barre_abilitata,codice_a_barre,step_avvitatore_connettore_abilitata,verifica_resistenza_connettore_abilitata,scala_resistenza,resistenza_attesa,tolleranza_resistenza,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_svuotmento,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_svuotmento_2,test_visione_abilitato,ricetta_visione,stampa_etichetta_abilitata,modello_etichetta
,,,,,,,,500,1000000000,20,x,0,1000,5,5,5,5,5,200,1000,200,1,100,,0,1000,5,5,5,5,5,200,1000,200,1,100,,termorestringente_923578.ini,x,EtichettaR5.prn ,,,,,,,,,500,1000000000,20,x,0,1000,5,5,5,5,5,200,1000,200,1,100,,0,1000,5,5,5,5,5,200,1000,200,1,100,,termorestringente_923578.ini,x,EtichettaR5.prn

1 codice_ricetta cliente part_number verifica_connettore_abilitata connettore verifica_codice_a_barre_abilitata codice_a_barre step_avvitatore_connettore_abilitata verifica_resistenza_connettore_abilitata scala_resistenza resistenza_attesa tolleranza_resistenza 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_svuotmento 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_svuotmento_2 test_visione_abilitato ricetta_visione stampa_etichetta_abilitata modello_etichetta
2 500 1000000000 20 x 0 1000 5 5 5 5 5 200 1000 200 1 100 0 1000 5 5 5 5 5 200 1000 200 1 100 termorestringente_923578.ini x EtichettaR5.prn

View File

@ -17,7 +17,7 @@ class Recipes(BaseModel):
def get_steps(self): def get_steps(self):
steps = [] steps = []
for step_pk in self.spec.get("available_steps", {}).values(): for step_pk in self.spec.get("steps", []):
steps.append(Steps.get_by_id(step_pk)) steps.append(Steps.get_by_id(step_pk))
return steps return steps

View File

@ -2,8 +2,8 @@ from ui.editor import Editor
class Barcodes_Step_Editor(Editor): class Barcodes_Step_Editor(Editor):
def __init__(self, cell_widget=None): def __init__(self, action=None, cell_widget=None):
super().__init__(cell_widget=cell_widget) super().__init__(action=action, cell_widget=cell_widget)
self.spec.update({ self.spec.update({
"serial": self.serial_le, "serial": self.serial_le,
}) })

View File

@ -2,8 +2,8 @@ from ui.editor import Editor
class Connector_Step_Editor(Editor): class Connector_Step_Editor(Editor):
def __init__(self, cell_widget=None): def __init__(self, action=None, cell_widget=None):
super().__init__(cell_widget=cell_widget) super().__init__(action=action, cell_widget=cell_widget)
self.spec.update({ self.spec.update({
"connector": self.connector_le, "connector": self.connector_le,
}) })

View File

@ -39,7 +39,7 @@ def from_str(data, field=None):
class Cell: class Cell:
modified = pyqtSignal(bool) modified = pyqtSignal(bool)
def __init__(self, readonly=True, autocomplete=None, field_name=None, field_alias=None, field=None, row_number=None, crud=None): def __init__(self, action=None, readonly=True, autocomplete=None, field_name=None, field_alias=None, field=None, row_number=None, crud=None):
self.readonly = readonly self.readonly = readonly
self.autocomplete = autocomplete self.autocomplete = autocomplete
self.field_name = field_name self.field_name = field_name
@ -100,14 +100,14 @@ class Cell:
return self.value return self.value
return self.parse(*args, **kwargs) return self.parse(*args, **kwargs)
def parse(self, row_number=None, crud=None): def parse(self, action=None, row_number=None, crud=None):
raise NotImplementedError() raise NotImplementedError()
class Line_Edit_Cell_Widget(QLineEdit, Cell): class Line_Edit_Cell_Widget(QLineEdit, Cell):
def __init__(self, readonly=True, autocomplete=None, field_name=None, field_alias=None, field=None, row_number=None, crud=None): def __init__(self, action=None, readonly=True, autocomplete=None, field_name=None, field_alias=None, field=None, row_number=None, crud=None):
super().__init__() super().__init__()
Cell.__init__(self, readonly=readonly, autocomplete=autocomplete, field_name=field_name, field_alias=field_alias, field=field, row_number=row_number, crud=crud) Cell.__init__(self, action=action, readonly=readonly, autocomplete=autocomplete, field_name=field_name, field_alias=field_alias, field=field, row_number=row_number, crud=crud)
def set_readonly(self, readonly=True): def set_readonly(self, readonly=True):
self.setReadOnly(readonly) self.setReadOnly(readonly)
@ -119,14 +119,14 @@ class Line_Edit_Cell_Widget(QLineEdit, Cell):
self.value = data self.value = data
self.setText(to_str(data)) self.setText(to_str(data))
def parse(self, row_number=None, crud=None): def parse(self, action=None, row_number=None, crud=None):
return from_str(self.text(), self.field) return from_str(self.text(), self.field)
class Combo_Box_Cell_Widget(QComboBox, Cell): class Combo_Box_Cell_Widget(QComboBox, Cell):
def __init__(self, readonly=True, autocomplete=None, field_name=None, field_alias=None, field=None, row_number=None, crud=None): def __init__(self, action=None, readonly=True, autocomplete=None, field_name=None, field_alias=None, field=None, row_number=None, crud=None):
super().__init__() super().__init__()
Cell.__init__(self, readonly=readonly, autocomplete=autocomplete, field_name=field_name, field_alias=field_alias, field=field, row_number=row_number, crud=crud) Cell.__init__(self, action=action, readonly=readonly, autocomplete=autocomplete, field_name=field_name, field_alias=field_alias, field=field, row_number=row_number, crud=crud)
def set_readonly(self, readonly=True): def set_readonly(self, readonly=True):
self.setEditable(not readonly) self.setEditable(not readonly)
@ -141,12 +141,12 @@ class Combo_Box_Cell_Widget(QComboBox, Cell):
def render(self, data, field_name=None, row_number=None, crud=None): def render(self, data, field_name=None, row_number=None, crud=None):
self.setCurrentText(to_str(data)) self.setCurrentText(to_str(data))
def parse(self, row_number=None, crud=None): def parse(self, action=None, row_number=None, crud=None):
return from_str(self.currentText(), self.field) return from_str(self.currentText(), self.field)
class External_Dialog_Cell_Widget(QPushButton, Cell): class External_Dialog_Cell_Widget(QPushButton, Cell):
def __init__(self, readonly=True, autocomplete=None, field_name=None, field_alias=None, field=None, row_number=None, crud=None): def __init__(self, action=None, readonly=True, autocomplete=None, field_name=None, field_alias=None, field=None, row_number=None, crud=None):
self.dialog = QDialog() self.dialog = QDialog()
self.editor = QPlainTextEdit() self.editor = QPlainTextEdit()
self.dialog.setLayout(QGridLayout()) self.dialog.setLayout(QGridLayout())
@ -157,7 +157,7 @@ class External_Dialog_Cell_Widget(QPushButton, Cell):
super().__init__(u"\u238B visualizza") super().__init__(u"\u238B visualizza")
else: else:
super().__init__(u"\u238B modifica") super().__init__(u"\u238B modifica")
Cell.__init__(self, readonly=readonly, autocomplete=autocomplete, field_name=field_name, field_alias=field_alias, field=field, row_number=row_number, crud=crud) Cell.__init__(self, action=action, readonly=readonly, autocomplete=autocomplete, field_name=field_name, field_alias=field_alias, field=field, row_number=row_number, crud=crud)
self.dialog.setWindowTitle(self.field_alias) self.dialog.setWindowTitle(self.field_alias)
self.clicked.connect(self.show_dialog) self.clicked.connect(self.show_dialog)
@ -173,7 +173,7 @@ class External_Dialog_Cell_Widget(QPushButton, Cell):
def render(self, data, field_name=None, row_number=None, crud=None): def render(self, data, field_name=None, row_number=None, crud=None):
self.editor.setPlainText(to_str(data)) self.editor.setPlainText(to_str(data))
def parse(self, row_number=None, crud=None): def parse(self, action=None, row_number=None, crud=None):
return from_str(self.editor.toPlainText(), self.field) return from_str(self.editor.toPlainText(), self.field)
@ -181,27 +181,27 @@ class Json_External_Dialog_Cell_Widget(External_Dialog_Cell_Widget):
def render(self, data, field_name=None, row_number=None, crud=None): def render(self, data, field_name=None, row_number=None, crud=None):
self.editor.setPlainText(json.dumps(data, indent="\t")) self.editor.setPlainText(json.dumps(data, indent="\t"))
def parse(self, row_number=None, crud=None): def parse(self, action=None, row_number=None, crud=None):
return json.loads(self.editor.toPlainText()) return json.loads(self.editor.toPlainText())
class Json_External_Dialog_Editor_Cell_Widget(QPushButton, Cell): class Json_External_Dialog_Editor_Cell_Widget(QPushButton, Cell):
def __init__(self, editor_widget_class, *args, readonly=True, autocomplete=None, field_name=None, field_alias=None, field=None, row_number=None, crud=None, **kwargs): def __init__(self, editor_widget_class, *args, action=None, readonly=True, autocomplete=None, field_name=None, field_alias=None, field=None, row_number=None, crud=None, **kwargs):
if not issubclass(editor_widget_class, Editor): if not issubclass(editor_widget_class, Editor):
raise AssertionError(f"editor_widget_class {editor_widget_class!r} must be a subclass of {Editor!r}") raise AssertionError(f"editor_widget_class {editor_widget_class!r} must be a subclass of {Editor!r}")
self.editor = editor_widget_class(*args, cell_widget=weakref.ref(self), **kwargs) self.editor = editor_widget_class(*args, action=action, cell_widget=weakref.ref(self), **kwargs)
if crud() is None or crud().readonly is True or (crud().readonly is list and field_name in crud().readonly): if crud() is None or crud().readonly is True or (crud().readonly is list and field_name in crud().readonly):
super().__init__(u"\u238B visualizza") super().__init__(u"\u238B visualizza")
else: else:
super().__init__(u"\u238B modifica") super().__init__(u"\u238B modifica")
Cell.__init__(self, readonly=readonly, autocomplete=autocomplete, field_name=field_name, field_alias=field_alias, field=field, row_number=row_number, crud=crud) Cell.__init__(self, action=action, readonly=readonly, autocomplete=autocomplete, field_name=field_name, field_alias=field_alias, field=field, row_number=row_number, crud=crud)
self.dialog = Dialog() self.dialog = Dialog()
self.dialog.setAttribute(Qt.WA_DeleteOnClose, on=False) self.dialog.setAttribute(Qt.WA_DeleteOnClose, on=False)
self.dialog.setCentralWidget(self.editor) self.dialog.setCentralWidget(self.editor)
self.dialog.setWindowTitle(self.field_alias) self.dialog.setWindowTitle(self.field_alias)
self.clicked.connect(self.show_dialog) self.clicked.connect(self.show_dialog)
if hasattr(self.editor, "init"): if hasattr(self.editor, "init"):
self.editor.init() self.editor.init(action=action)
def set_readonly(self, readonly=True): def set_readonly(self, readonly=True):
self.editor.set_readonly(readonly=readonly) self.editor.set_readonly(readonly=readonly)
@ -220,7 +220,12 @@ class Json_External_Dialog_Editor_Cell_Widget(QPushButton, Cell):
def render(self, data, field_name=None, row_number=None, crud=None): def render(self, data, field_name=None, row_number=None, crud=None):
self.editor.render(data, field_name=field_name, row_number=row_number, crud=crud) self.editor.render(data, field_name=field_name, row_number=row_number, crud=crud)
def parse(self, row_number=None, crud=None): # def _parse(self, action=None, row_number=None, crud=None):
# if action != "commit" and self.connected_modified and not self.is_modified:
# return self.value
# return self.editor.parse(action=action, row_number=row_number, crud=crud)
def parse(self, action=None, row_number=None, crud=None):
return self.editor.parse(row_number=row_number, crud=crud) return self.editor.parse(row_number=row_number, crud=crud)
@ -380,7 +385,7 @@ class Crud(Widget):
for fn, cn in self.select_index.items(): for fn, cn in self.select_index.items():
w = self.db_tw.cellWidget(rn, cn) w = self.db_tw.cellWidget(rn, cn)
try: try:
r[fn] = w._parse(row_number=rn, crud=weakref.ref(self)) r[fn] = w._parse(action="commit", row_number=rn, crud=weakref.ref(self))
except Exception as e: except Exception as e:
self.log.exception(traceback.format_exc()) self.log.exception(traceback.format_exc())
self.set_row_color(rn, "red") self.set_row_color(rn, "red")
@ -472,7 +477,7 @@ class Crud(Widget):
r = self.row_upgrader(r, rn, self) r = self.row_upgrader(r, rn, self)
for fn, cn in self.select_index.items(): for fn, cn in self.select_index.items():
readonly = self.readonly is None or self.readonly is True or (self.readonly is not False and fn in self.readonly) readonly = self.readonly is None or self.readonly is True or (self.readonly is not False and fn in self.readonly)
w = self.widget_classes.get(fn, self.default_widget_class)(readonly=readonly, autocomplete=self.autocomplete.get(fn, None), field_name=fn, field_alias=self.fields_aliases[fn], field=self.db.table_model._meta.fields.get(fn, None), row_number=rn, crud=weakref.ref(self)) w = self.widget_classes.get(fn, self.default_widget_class)(action="refresh", readonly=readonly, autocomplete=self.autocomplete.get(fn, None), field_name=fn, field_alias=self.fields_aliases[fn], field=self.db.table_model._meta.fields.get(fn, None), row_number=rn, crud=weakref.ref(self))
w.set_readonly(readonly=w.readonly) w.set_readonly(readonly=w.readonly)
w.do_autocomplete(w.autocomplete) w.do_autocomplete(w.autocomplete)
w.modified.connect(self.set_modified) w.modified.connect(self.set_modified)
@ -497,7 +502,7 @@ class Crud(Widget):
self.db_tw.setRowCount(rn + 1) self.db_tw.setRowCount(rn + 1)
for fn, cn in self.select_index.items(): for fn, cn in self.select_index.items():
readonly = self.readonly is None or self.readonly is True or (self.readonly is not False and fn in self.readonly) readonly = self.readonly is None or self.readonly is True or (self.readonly is not False and fn in self.readonly)
w = self.widget_classes.get(fn, self.default_widget_class)(readonly=readonly, autocomplete=self.autocomplete.get(fn, None), field_name=fn, field_alias=self.fields_aliases[fn], field=self.db.table_model._meta.fields.get(fn, None), row_number=rn, crud=weakref.ref(self)) w = self.widget_classes.get(fn, self.default_widget_class)(action="add", readonly=readonly, autocomplete=self.autocomplete.get(fn, None), field_name=fn, field_alias=self.fields_aliases[fn], field=self.db.table_model._meta.fields.get(fn, None), row_number=rn, crud=weakref.ref(self))
w.set_readonly(readonly=w.readonly) w.set_readonly(readonly=w.readonly)
w.do_autocomplete(w.autocomplete) w.do_autocomplete(w.autocomplete)
w.modified.connect(self.set_modified) w.modified.connect(self.set_modified)

View File

@ -8,7 +8,7 @@ from ui.widget import Widget
class Editor(Widget): class Editor(Widget):
def __init__(self, cell_widget=None): def __init__(self, action=None, cell_widget=None):
super().__init__() super().__init__()
if cell_widget is None: if cell_widget is None:
self.cell_widget = None self.cell_widget = None
@ -116,7 +116,7 @@ class Editor(Widget):
# ignore default values # ignore default values
pass pass
def parse(self, row_number=None, crud=None): def parse(self, action=None, row_number=None, crud=None):
ret = {} ret = {}
for k, w in self.spec.items(): for k, w in self.spec.items():
if isinstance(w, QCheckBox): if isinstance(w, QCheckBox):

View File

@ -2,8 +2,8 @@ from ui.editor import Editor
class Leak_Step_Editor(Editor): class Leak_Step_Editor(Editor):
def __init__(self, cell_widget=None): def __init__(self, action=None, cell_widget=None):
super().__init__(cell_widget=cell_widget) super().__init__(action=action, cell_widget=cell_widget)
self.spec.update({ self.spec.update({
# pre-filling # pre-filling
"pre_filling_time": self.pre_filling_time_sb, "pre_filling_time": self.pre_filling_time_sb,

View File

@ -2,8 +2,8 @@ from ui.editor import Editor
class Print_Step_Editor(Editor): class Print_Step_Editor(Editor):
def __init__(self, cell_widget=None): def __init__(self, action=None, cell_widget=None):
super().__init__(cell_widget=cell_widget) super().__init__(action=action, cell_widget=cell_widget)
self.spec.update({ self.spec.update({
"template": self.label_template_cb, "template": self.label_template_cb,
}) })

View File

@ -159,6 +159,7 @@ class Recipe_Selection(Widget):
"barcodes": { "barcodes": {
"serial": row.get(barcode_serial_field, defaults["codice_a_barre"]), "serial": row.get(barcode_serial_field, defaults["codice_a_barre"]),
}, },
"screwdriver": {},
"resistance": { "resistance": {
"scale": float(row.get("scala_resistenza", defaults["scala_resistenza"])), "scale": float(row.get("scala_resistenza", defaults["scala_resistenza"])),
"expected": float(row.get("resistenza_attesa", defaults["resistenza_attesa"])), "expected": float(row.get("resistenza_attesa", defaults["resistenza_attesa"])),
@ -246,6 +247,7 @@ class Recipe_Selection(Widget):
recipe.spec = { recipe.spec = {
"connector": len(row.get("verifica_connettore_abilitata", defaults["verifica_connettore_abilitata"])) and "connector" not in self.unsupported_steps, "connector": len(row.get("verifica_connettore_abilitata", defaults["verifica_connettore_abilitata"])) and "connector" not in self.unsupported_steps,
"barcodes": len(row.get(barcode_enale_field, defaults["verifica_codice_a_barre_abilitata"])) and "barcodes" not in self.unsupported_steps, "barcodes": len(row.get(barcode_enale_field, defaults["verifica_codice_a_barre_abilitata"])) and "barcodes" not in self.unsupported_steps,
"screwdriver": len(row.get("step_avvitatore_connettore_abilitata", defaults["step_avvitatore_connettore_abilitata"])) and "screwdriver" not in self.unsupported_steps,
"resistance": len(row.get("verifica_resistenza_connettore_abilitata", defaults["verifica_resistenza_connettore_abilitata"])) and "resistance" not in self.unsupported_steps, "resistance": len(row.get("verifica_resistenza_connettore_abilitata", defaults["verifica_resistenza_connettore_abilitata"])) and "resistance" not in self.unsupported_steps,
"leak_1": len(row.get("prova_tenuta_abilitata", defaults["prova_tenuta_abilitata"])) and "leak" not in self.unsupported_steps, "leak_1": len(row.get("prova_tenuta_abilitata", defaults["prova_tenuta_abilitata"])) and "leak" not in self.unsupported_steps,
"leak_2": len(row.get("prova_tenuta_abilitata_2", defaults["prova_tenuta_abilitata_2"])) and "leak" not in self.unsupported_steps, "leak_2": len(row.get("prova_tenuta_abilitata_2", defaults["prova_tenuta_abilitata_2"])) and "leak" not in self.unsupported_steps,
@ -255,6 +257,7 @@ class Recipe_Selection(Widget):
"available_steps": { "available_steps": {
"connector": steps["connector"].get_id(), "connector": steps["connector"].get_id(),
"barcodes": steps["barcodes"].get_id(), "barcodes": steps["barcodes"].get_id(),
"screwdriver": steps["screwdriver"].get_id(),
"resistance": steps["resistance"].get_id(), "resistance": steps["resistance"].get_id(),
"leak_1": steps["leak_1"].get_id(), "leak_1": steps["leak_1"].get_id(),
"leak_2": steps["leak_2"].get_id(), "leak_2": steps["leak_2"].get_id(),

View File

@ -12,8 +12,8 @@ from ui.vision_step_editor import Vision_Step_Editor
class Recipe_Spec_And_Step_Editor(Editor): class Recipe_Spec_And_Step_Editor(Editor):
def __init__(self, cell_widget=None, unsupported_steps=None): def __init__(self, action=None, cell_widget=None, unsupported_steps=None):
super().__init__(cell_widget=cell_widget) super().__init__(action=action, cell_widget=cell_widget)
self.map = { self.map = {
"connector": { "connector": {
"type": "connector", "type": "connector",
@ -105,19 +105,24 @@ class Recipe_Spec_And_Step_Editor(Editor):
if editor is not None: if editor is not None:
editor.do_autocomplete(step_editors_autocomplete.get(step_name, None)) editor.do_autocomplete(step_editors_autocomplete.get(step_name, None))
def init(self): def init(self, action=None):
self.get_steps() self.get_steps()
if action == "add":
self.save_steps()
def connect_modified(self, check_modified): def showing_dialog(self):
super().connect_modified(check_modified) self.reset_steps()
for map in self.map.values():
editor = map.get("editor", None) # def connect_modified(self, check_modified):
if editor is not None: # super().connect_modified(check_modified)
editor.connect_modified(check_modified) # for map in self.map.values():
# editor = map.get("editor", None)
# if editor is not None:
# editor.connect_modified(check_modified)
def render(self, data, field_name=None, row_number=None, crud=None): def render(self, data, field_name=None, row_number=None, crud=None):
super().render(data, field_name=field_name, row_number=row_number, crud=crud) super().render(data, field_name=field_name, row_number=row_number, crud=crud)
self.available_steps = data.get("available_steps", {}) self.available_steps = data.get("available_steps", None)
self.get_steps() self.get_steps()
steps = set(data.get("steps", set())) steps = set(data.get("steps", set()))
for map in self.map.values(): for map in self.map.values():
@ -126,7 +131,9 @@ class Recipe_Spec_And_Step_Editor(Editor):
map["enable"].setChecked(step.name in steps and not map.get("hidden", False)) map["enable"].setChecked(step.name in steps and not map.get("hidden", False))
self.render_steps() self.render_steps()
def parse(self, row_number=None, crud=None): def parse(self, action=None, row_number=None, crud=None):
# if action == "commit":
# self.save_steps()
ret = super().parse(row_number=row_number, crud=crud) ret = super().parse(row_number=row_number, crud=crud)
ret["steps"] = [] ret["steps"] = []
ret["available_steps"] = {} ret["available_steps"] = {}

View File

@ -3,8 +3,8 @@ from ui.editor import Editor
class Recipe_Spec_Editor(Editor): class Recipe_Spec_Editor(Editor):
def __init__(self, cell_widget=None): def __init__(self, action=None, cell_widget=None):
super().__init__(cell_widget=cell_widget) super().__init__(action=action, cell_widget=cell_widget)
self.spec.update({ self.spec.update({
"steps": self.steps_lw, "steps": self.steps_lw,
}) })

View File

@ -2,8 +2,8 @@ from ui.editor import Editor
class Resistance_Step_Editor(Editor): class Resistance_Step_Editor(Editor):
def __init__(self, cell_widget=None): def __init__(self, action=None, cell_widget=None):
super().__init__(cell_widget=cell_widget) super().__init__(action=action, cell_widget=cell_widget)
self.spec.update({ self.spec.update({
"scale": self.scale_dsb, "scale": self.scale_dsb,
"expected": self.expected_dsb, "expected": self.expected_dsb,

View File

@ -2,8 +2,8 @@ from ui.editor import Editor
class Screwdriver_Step_Editor(Editor): class Screwdriver_Step_Editor(Editor):
def __init__(self, cell_widget=None): def __init__(self, action=None, cell_widget=None):
super().__init__(cell_widget=cell_widget) super().__init__(action=action, cell_widget=cell_widget)
self.spec.update({ self.spec.update({
"connector": self.connector_le, "connector": self.connector_le,
}) })

View File

@ -10,7 +10,7 @@ from ui.widget import Widget
class Step_Spec_JEDECW(QPushButton, Cell): class Step_Spec_JEDECW(QPushButton, Cell):
def __init__(self, readonly=True, autocomplete=None, field_name=None, field_alias=None, field=None, row_number=None, crud=None): def __init__(self, action=None, readonly=True, autocomplete=None, field_name=None, field_alias=None, field=None, row_number=None, crud=None):
self.editors = { self.editors = {
"vision": Vision_Step_Editor(cell_widget=self), "vision": Vision_Step_Editor(cell_widget=self),
"leak": Leak_Step_Editor(cell_widget=self), "leak": Leak_Step_Editor(cell_widget=self),
@ -20,7 +20,7 @@ class Step_Spec_JEDECW(QPushButton, Cell):
self.dialog = Dialog() self.dialog = Dialog()
self.dialog.setAttribute(Qt.WA_DeleteOnClose, on=False) self.dialog.setAttribute(Qt.WA_DeleteOnClose, on=False)
super().__init__(u"\u238B modifica") super().__init__(u"\u238B modifica")
Cell.__init__(self, readonly=readonly, autocomplete=autocomplete, field_name=field_name, field_alias=field_alias, field=field, row_number=row_number, crud=crud) Cell.__init__(self, action=action, readonly=readonly, autocomplete=autocomplete, field_name=field_name, field_alias=field_alias, field=field, row_number=row_number, crud=crud)
self.update_editor() self.update_editor()
self.crud().modified.connect(self.update_editor) self.crud().modified.connect(self.update_editor)
self.dialog.setWindowTitle(self.field_alias) self.dialog.setWindowTitle(self.field_alias)
@ -51,7 +51,7 @@ class Step_Spec_JEDECW(QPushButton, Cell):
def render(self, data, field_name=None, row_number=None, crud=None): def render(self, data, field_name=None, row_number=None, crud=None):
self.editor.render(data, field_name=field_name, row_number=row_number, crud=crud) self.editor.render(data, field_name=field_name, row_number=row_number, crud=crud)
def parse(self, row_number=None, crud=None): def parse(self, action=None, row_number=None, crud=None):
return self.editor.parse(row_number=row_number, crud=crud) return self.editor.parse(row_number=row_number, crud=crud)

View File

@ -68,6 +68,7 @@ class Test(Widget):
"leak": Test_Assembly(img_path=None, text=None, widget=Test_Leak(components=self.components, recipe=self.recipe, step=self.step)), "leak": Test_Assembly(img_path=None, text=None, widget=Test_Leak(components=self.components, recipe=self.recipe, step=self.step)),
"print": Test_Assembly(img_path=self.select_step_img("print"), text=u"STAMPA ETICHETTA IN CORSO", widget=None), "print": Test_Assembly(img_path=self.select_step_img("print"), text=u"STAMPA ETICHETTA IN CORSO", widget=None),
"resistance": Test_Assembly(img_path=None, text=u"COLLEGARE CONNETTORE ELETTRICO PER EFFETTUARE PROVA RESISTENZA", widget=Test_Resistance(components=self.components, recipe=self.recipe, step=self.step)), "resistance": Test_Assembly(img_path=None, text=u"COLLEGARE CONNETTORE ELETTRICO PER EFFETTUARE PROVA RESISTENZA", widget=Test_Resistance(components=self.components, recipe=self.recipe, step=self.step)),
"screwdriver": Test_Assembly(img_path=self.select_step_img("fail"), text=u"STEP SCREWDRIVER NON SUPPORTATO", widget=None),
"select_recipe": Test_Assembly(img_path=None, text=u"SELEZIONARE IL CODICE DA COLLAUDARE", widget=Recipe_Selection(config=self.config, unsupported_steps=self.unsupported_steps)), "select_recipe": Test_Assembly(img_path=None, text=u"SELEZIONARE IL CODICE DA COLLAUDARE", widget=Recipe_Selection(config=self.config, unsupported_steps=self.unsupported_steps)),
"vision": Test_Assembly(img_path=None, text=u"VERIFICARE CONTROLLO CON TELECAMERA", widget=Test_Vision(components=self.components, recipe=self.recipe, step=self.step)), "vision": Test_Assembly(img_path=None, text=u"VERIFICARE CONTROLLO CON TELECAMERA", widget=Test_Vision(components=self.components, recipe=self.recipe, step=self.step)),
"wait": Test_Assembly(img_path=self.select_step_img("wait"), text=u"ATTENDERE - PAUSA INTER CICLO", widget=None), "wait": Test_Assembly(img_path=self.select_step_img("wait"), text=u"ATTENDERE - PAUSA INTER CICLO", widget=None),

View File

@ -11,8 +11,8 @@ class Users_Management(Widget):
super().__init__() super().__init__()
class Username_Line_Edit_Cell_Widget(Line_Edit_Cell_Widget): class Username_Line_Edit_Cell_Widget(Line_Edit_Cell_Widget):
def parse(self, row_number=None, crud=None): def parse(self, action=None, row_number=None, crud=None):
data = super().parse(row_number=row_number, crud=crud) data = super().parse(action=action, row_number=row_number, crud=crud)
if data is not None and len(data): if data is not None and len(data):
return data.upper() return data.upper()
return None return None
@ -29,7 +29,7 @@ class Users_Management(Widget):
data = None data = None
self.setText(data) self.setText(data)
def parse(self, row_number=None, crud=None): def parse(self, action=None, row_number=None, crud=None):
data = self.text() data = self.text()
if data is not None and len(data): if data is not None and len(data):
return [data, False] # mark as NOT hash return [data, False] # mark as NOT hash
@ -39,7 +39,7 @@ class Users_Management(Widget):
def render(self, data, row_number=None, crud=None): def render(self, data, row_number=None, crud=None):
super().render(", ".join(data) if data is not None else None, row_number=row_number, crud=crud) super().render(", ".join(data) if data is not None else None, row_number=row_number, crud=crud)
def parse(self, row_number=None, crud=None): def parse(self, action=None, row_number=None, crud=None):
return Users.parse_roles(self.text()) return Users.parse_roles(self.text())
crud_aliases = { crud_aliases = {

View File

@ -2,8 +2,8 @@ from ui.editor import Editor
class Vision_Step_Editor(Editor): class Vision_Step_Editor(Editor):
def __init__(self, cell_widget=None): def __init__(self, action=None, cell_widget=None):
super().__init__(cell_widget=cell_widget) super().__init__(action=action, cell_widget=cell_widget)
self.spec.update({ self.spec.update({
"recipe": self.vision_recipe_cb, "recipe": self.vision_recipe_cb,
}) })