st-ten-1/src/ui/recipe_selection/recipe_selection.py

155 lines
6.4 KiB
Python
Raw Normal View History

2022-07-27 12:54:19 +00:00
import os
2022-06-01 16:37:19 +00:00
import sys
2022-07-27 12:54:19 +00:00
from glob import glob
2022-06-01 16:37:19 +00:00
from lib.db import Recipes, Users
2022-07-19 09:59:00 +00:00
from PyQt5.QtCore import QTimer, pyqtSignal
2022-06-01 16:37:19 +00:00
from PyQt5.QtGui import QKeySequence
2022-07-19 09:59:00 +00:00
from PyQt5.QtWidgets import QShortcut
from ui.crud import Crud, Json_External_Dialog_Editor_Cell_Widget
2022-06-01 16:37:19 +00:00
from ui.helpers import replace_widget
2022-07-25 09:16:14 +00:00
from ui.recipe_spec_and_step_editor import Recipe_Spec_And_Step_Editor
2022-06-01 16:37:19 +00:00
from ui.widget import Widget
class Recipe_Selection(Widget):
ok = pyqtSignal(Recipes)
def __init__(self, unsupported_steps=None):
2022-06-01 16:37:19 +00:00
super().__init__()
session = Users.get_session()
if session.is_admin:
2022-07-25 09:16:14 +00:00
readonly = ["id"]
2022-06-01 16:37:19 +00:00
crud_aliases = {
2022-07-25 09:16:14 +00:00
"id": "Id",
2022-06-01 16:37:19 +00:00
"name": "Ricetta",
2022-07-19 09:59:00 +00:00
"client": "Cliente",
"part_number": "N° disegno",
2022-06-01 16:37:19 +00:00
"spec": "Specifica",
2022-07-26 13:34:09 +00:00
"description": "Descrizione",
2022-06-01 16:37:19 +00:00
"archived": "Archiviata",
}
filters = None
else:
readonly = True
crud_aliases = {
"name": "Ricetta",
"client": "Cliente",
"part_number": "N° disegno",
"spec": "Specifica",
2022-07-26 13:34:09 +00:00
"description": "Descrizione",
2022-07-19 09:59:00 +00:00
# "archived": "Archiviata",
2022-06-01 16:37:19 +00:00
}
filters = {"archived": False}
self.crud = Crud(
"recipes",
display_name="SELEZIONE RICETTA",
readonly=readonly,
select=list(crud_aliases.keys()),
filters=filters,
fields_aliases=crud_aliases,
2022-06-28 10:31:27 +00:00
autocomplete={
2022-07-26 13:43:11 +00:00
"spec": {
"step_editors": {
2022-09-06 13:15:01 +00:00
"resistance": {
"scale": 500,
"expected": 0,
"tolerance": 20,
},
2022-07-27 15:09:17 +00:00
"leak_1": {
"pre_filling_time": 1,
"pre_filling_pressure": 1000,
"filling_time": 1,
"settling_time": 1,
"settling_pressure_min_percent": 5,
"settling_pressure_max_percent": 5,
"test_time": 5,
"test_pressure_min_delta": 100,
"test_pressure": 1000,
"test_pressure_max_delta": 100,
"flush_time": 1,
"flush_pressure": 100,
},
"leak_2": {
"pre_filling_time": 1,
"pre_filling_pressure": 1000,
"filling_time": 1,
"settling_time": 1,
"settling_pressure_min_percent": 5,
"settling_pressure_max_percent": 5,
"test_time": 5,
"test_pressure_min_delta": 100,
"test_pressure": 1000,
"test_pressure_max_delta": 100,
"flush_time": 1,
"flush_pressure": 100,
},
2022-07-26 13:43:11 +00:00
"vision": {
2022-07-27 13:36:38 +00:00
# "recipe": sorted(glob("*.ini", root_dir="./config/vision/recipes/")), # only in python3.10
"recipe": sorted(map(os.path.basename, glob("./config/vision/recipes/*.ini"))),
2022-07-26 13:43:11 +00:00
},
2022-09-06 13:15:01 +00:00
"print": {
# "template": sorted(glob("*.prn", root_dir="./config/label_templates/")), # only in python3.10
"template": sorted(map(os.path.basename, glob("./config/label_templates/*.prn"))),
},
2022-07-26 13:43:11 +00:00
},
},
2022-06-28 10:31:27 +00:00
"archived": False,
},
widget_classes={"spec": lambda *args, **kwargs: Json_External_Dialog_Editor_Cell_Widget(Recipe_Spec_And_Step_Editor, *args, **kwargs, unsupported_steps=unsupported_steps), },
2022-06-01 16:37:19 +00:00
)
replace_widget(self, "crud_w", self.crud)
self.crud_modified = None
self.selected = None
self.select_b.setEnabled(False)
self.select_b.clicked.connect(self.select)
QShortcut(QKeySequence("Return"), self).activated.connect(self.select_b.click)
self.crud.modified.connect(self.check_modified)
self.crud.selected.connect(self.check_selected)
self.crud.emit()
2022-07-26 13:47:31 +00:00
self.crud.db_tw.setColumnWidth(0, 25)
self.crud.db_tw.setColumnWidth(1, 200)
self.crud.db_tw.setColumnWidth(2, 200)
self.crud.db_tw.setColumnWidth(3, 200)
self.crud.db_tw.setColumnWidth(4, 200)
self.crud.db_tw.setColumnWidth(5, 400)
2022-06-01 16:37:19 +00:00
# TESTING
if "--auto-select" in sys.argv or "--test" in sys.argv:
drawing = "TEST"
cn = self.crud.select_index["name"]
2022-09-06 13:15:01 +00:00
self.crud.db_tw.clearSelection()
2022-06-01 16:37:19 +00:00
for rn in range(1, self.crud.db_tw.rowCount()):
if self.crud.db_tw.cellWidget(rn, cn).text() == drawing:
selection = self.crud.db_tw.model().index(rn, cn)
self.crud.db_tw.setCurrentIndex(selection)
break
self.test_timer = QTimer()
self.test_timer.setSingleShot(True)
self.test_timer.timeout.connect(self.select_b.clicked.emit)
self.test_timer.start(500)
# /TESTING
def check_modified(self, modified):
self.crud_modified = modified
self.check(self.crud_modified, self.selected)
2022-07-26 14:05:04 +00:00
def check_selected(self, selected=None):
if selected is not None and len(selected) == 1:
2022-06-01 16:37:19 +00:00
selected = selected[0] - 1 # - 1 because rn starts from 1 (filters line)
if selected >= 0 and selected < len(self.crud.data_index):
selected = self.crud.data_index[selected]
2022-07-06 13:54:22 +00:00
if selected is not None:
2022-07-26 14:05:04 +00:00
self.selected = selected
2022-07-06 13:54:22 +00:00
else:
self.selected = None
2022-06-01 16:37:19 +00:00
else:
self.selected = None
self.check(self.crud_modified, self.selected)
def check(self, modified, selected):
self.select_b.setEnabled(modified is False and selected is not None)
def select(self):
if self.selected is not None:
2022-07-26 14:05:04 +00:00
self.ok.emit(self.crud.db.table_model.get_by_id(self.selected))