st-ten-1/src/ui/recipe_selection/recipe_selection.py
matteo porta b95ae1fa02 wip
2022-07-25 11:57:05 +02:00

101 lines
3.7 KiB
Python
Executable File

import sys
from lib.db import Recipes, Users
from PyQt5.QtCore import QTimer, pyqtSignal
from PyQt5.QtGui import QKeySequence
from PyQt5.QtWidgets import QShortcut
from ui.crud import Crud, Json_External_Dialog_Editor_Cell_Widget
from ui.helpers import replace_widget
from ui.recipe_spec_and_step_editor import Recipe_Spec_And_Step_Editor
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:
readonly = ["id"]
crud_aliases = {
"id": "Id",
"name": "Ricetta",
"client": "Cliente",
"part_number": "N° disegno",
"spec": "Specifica",
"description": "Desccrizione",
"archived": "Archiviata",
}
filters = None
else:
readonly = True
crud_aliases = {
"name": "Ricetta",
"client": "Cliente",
"part_number": "N° disegno",
"spec": "Specifica",
"description": "Desccrizione",
# "archived": "Archiviata",
}
filters = {"archived": False}
self.crud = Crud(
"recipes",
display_name="SELEZIONE RICETTA",
readonly=readonly,
select=list(crud_aliases.keys()),
filters=filters,
fields_aliases=crud_aliases,
autocomplete={
"archived": False,
},
widget_classes={"spec": lambda *args, **kwargs: Json_External_Dialog_Editor_Cell_Widget(Recipe_Spec_And_Step_Editor(), *args, **kwargs), },
)
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]
if selected is not None:
self.selected = self.crud.db.table_model.get_by_id(selected)
else:
self.selected = None
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)