2022-06-01 16:37:19 +00:00
|
|
|
import sys
|
2022-07-26 13:43:11 +00:00
|
|
|
from glob import iglob
|
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):
|
|
|
|
|
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": {
|
|
|
|
|
"vision": {
|
|
|
|
|
# "recipe": iglob("*.ini", root_dir="./config/vision/recipes/"), # only in python3.10
|
|
|
|
|
"recipe": list(iglob("./config/vision/recipes/*.ini")),
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
},
|
2022-06-28 10:31:27 +00:00
|
|
|
"archived": False,
|
|
|
|
|
},
|
2022-07-26 10:24:53 +00:00
|
|
|
widget_classes={"spec": lambda *args, **kwargs: Json_External_Dialog_Editor_Cell_Widget(Recipe_Spec_And_Step_Editor, *args, **kwargs), },
|
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"]
|
|
|
|
|
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)
|
|
|
|
|
|
|
|
|
|
def check_selected(self, selected):
|
|
|
|
|
if len(selected) == 1:
|
|
|
|
|
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:
|
|
|
|
|
self.selected = self.crud.db.table_model.get_by_id(selected)
|
|
|
|
|
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:
|
|
|
|
|
self.ok.emit(self.selected)
|