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

105 lines
3.5 KiB
Python
Raw Normal View History

2023-03-03 17:51:35 +00:00
import sys
2023-03-29 16:12:27 +00:00
import peewee
2023-03-03 17:51:35 +00:00
from PyQt5 import Qt
from lib.helpers import timing
from PyQt5.QtCore import Qt, QTimer, QThread
from PyQt5.QtGui import QKeySequence, QPixmap, QPalette, QColor
from PyQt5.QtWidgets import QShortcut, QApplication
from ui.widget import Widget
2023-03-29 16:12:27 +00:00
from lib import db
from lib.db.models import Recipes
2023-03-03 17:51:35 +00:00
test_scan="xxx\nyyy\nzzz"
class Barcode_Recipe_Selection(Widget):
2023-03-25 14:42:32 +00:00
def __init__(self, parent):
2023-03-03 17:51:35 +00:00
super().__init__()
2023-03-25 14:42:32 +00:00
self.parent=parent
2023-03-29 16:12:27 +00:00
self.recipe_db_model=Recipes
self.debounce_time = 200
self.barcode_input_l.textChanged.connect(self.debounce)
2023-03-03 17:51:35 +00:00
self.status_palettes = {
True: QPalette(),
"": QPalette(),
"warning": QPalette(),
False: QPalette(),
None: QPalette(),
}
self.status_palettes[True].setColor(QPalette.Base, Qt.green)
self.status_palettes[False].setColor(QPalette.Base, Qt.red)
self.status_palettes["warning"].setColor(QPalette.Base, QColor(255, 165, 0))
self.status_palettes[""].setColor(QPalette.Base, QColor(255, 255, 0))
2023-03-25 15:09:23 +00:00
self.recipe_selection_b.clicked.connect(self.parent.set_recipe_mode_table)
2023-03-03 17:51:35 +00:00
self.barcode_input_l.setFocus()
2023-03-25 14:42:32 +00:00
2023-03-03 17:51:35 +00:00
self.focus_timer = QTimer()
self.focus_timer.setSingleShot(True)
self.focus_timer.timeout.connect(self.set_focus)
2023-03-29 16:12:27 +00:00
self.wait_timer = QTimer()
self.wait_timer.setSingleShot(True)
self.wait_timer.timeout.connect(self.get)
self.ok_timer = QTimer()
self.ok_timer.setSingleShot(True)
self.ok_timer.timeout.connect(self.set_recipe)
2023-03-03 17:51:35 +00:00
def start(self, recipe=None, step=None, pieces=None):
self.barcode_input_l.setPalette(self.status_palettes[None])
self.barcode_input_l.setPlainText("")
self.barcode_input_l.setFocus()
self.focus_timer.start(500)
2023-03-29 16:12:27 +00:00
def debounce(self):
if self.wait_timer.remainingTime()>0:
self.wait_timer.setInterval(self.debounce_time)
else:
self.wait_timer.start(self.debounce_time)
2023-03-03 17:51:35 +00:00
def get(self, data=None, override=False):
if data is None:
data = self.barcode_input_l.toPlainText()
if not len(data):
data = None
if data is None:
return
else:
2023-03-29 16:12:27 +00:00
lines = data.splitlines()
candidates = [i for i in lines if len(i)==10]
if len(candidates)>0:
# RECIPE CODE FOUND
self.recipe=candidates[-1]
self.barcode_input_l.setPalette(self.status_palettes[True])
self.ok_timer.start(2000)
else:
# RECIPE CODE NOT FOUND
self.barcode_input_l.setPalette(self.status_palettes[False])
self.focus_timer.start(3000)
2023-03-03 17:51:35 +00:00
# LOOKUP RECIPE
2023-03-29 16:12:27 +00:00
def set_recipe(self):
try:
recipe = self.recipe_db_model.get_by_id(self.recipe)
self.parent.set_recipe(recipe)
except peewee.DoesNotExist:
self.barcode_input_l.setPalette(self.status_palettes[False])
self.focus_timer.start(3000)
self.parent.centralWidget.set_text("RICETTA NON TROVATA",color="red")
2023-03-03 17:51:35 +00:00
def set_focus(self):
self.barcode_input_l.setFocus()
self.barcode_input_l.setPlainText("")
self.barcode_input_l.setPalette(self.status_palettes[""])
2023-03-29 16:12:27 +00:00
if getattr(self.parent.centralWidget,"set_text"):
self.parent.centralWidget.set_text("SCANSIONARE BARCODE SELEZIONE RICETTA")
2023-03-03 17:51:35 +00:00