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

101 lines
3.7 KiB
Python
Raw Normal View History

2022-06-01 16:37:19 +00:00
import sys
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-19 09:59:00 +00:00
"description": "Desccrizione",
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-19 09:59:00 +00:00
"description": "Desccrizione",
# "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={
"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()
# 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)