import sys import peewee 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 from lib import db from lib.db.models import Recipes class RFID(Widget): def __init__(self, parent): super().__init__() self.parent=parent self.recipe_db_model=Recipes 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)) self.delay_timer = QTimer() self.delay_timer.setSingleShot(True) self.delay_timer.timeout.connect(self.reset_display) self.ok_timer = QTimer() self.ok_timer.setSingleShot(True) self.ok_timer.timeout.connect(self.set_recipe) def start(self, recipe=None, step=None, pieces=None): self.rfid_input_l.setPalette(self.status_palettes[None]) self.rfid_input_l.setPlainText("") def get(self, data=None, override=False): if not len(data): data = None if data is None: return else: lines = data if lines[0]=="ERRECINQUE RFID": # RECIPE CODE FOUND self.recipe=lines[1] self.rfid_input_l.setPalette(self.status_palettes[True]) self.ok_timer.start(2000) else: # RECIPE CODE NOT FOUND self.rfid_input_l.setPalette(self.status_palettes[False]) self.instruction_text("FORMATO RFID DIMA NON VALIDO", "red") self.delay_timer.start(3000) # LOOKUP RECIPE def set_recipe(self): try: recipe = self.recipe_db_model.get_by_id(self.recipe) self.parent.set_recipe(recipe) except peewee.DoesNotExist: self.rfid_input_l.setPalette(self.status_palettes[False]) self.instruction_text("RICETTA NON TROVATA","red") self.delay_timer.start(3000) def reset_display(self): self.rfid_input_l.setFocus() self.rfid_input_l.setPlainText("") self.rfid_input_l.setPalette(self.status_palettes[""]) self.instruction_text("SCANSIONARE BARCODE SELEZIONE RICETTA") def instruction_text(self,text,color=None): if getattr(self.parent.centralWidget, "set_text"): self.parent.centralWidget.set_text(text, color=color)