""" The Insitutional Record ui loader """ # Python import os import can import struct # Qt from PySide2 import QtCore, QtWidgets from PySide2.QtCore import Slot # parent from engine.dynamicloader import DynamicLoader # plugin specific from leahi_dialin.common.msg_defs import MsgIds, MsgFieldPositions from leahi_dialin.protocols import CAN from leahi_dialin.utils import conversions # hd Simulator from leahi_dialin.ui.td_messaging import TD_Messaging class Loader(DynamicLoader): """ The Advanced Institutional ui loader """ def __init__(self): self.td_interface = TD_Messaging() self.can_interface = self.td_interface.can_interface super().__init__(os.path.dirname(__file__)) self.index = 0 if self.can_interface is not None: channel_id = CAN.DenaliChannels.ui_to_td_ch_id request_message_id = MsgIds.MSG_ID_TD_ADVANCED_INSTITUTIONAL_RECORD_REQUEST.value adjust_request_message_id = MsgIds.MSG_ID_TD_ADVANCED_ADJUST_INSTITUTIONAL_RECORD_REQUEST.value self.can_interface.register_receiving_publication_function(channel_id, request_message_id, self.handle_request) self.can_interface.register_receiving_publication_function(channel_id, adjust_request_message_id, self.handle_adjust_request) def _init_loader(self): """ finds and creates widgets :return: none """ self.tbSend = self.find_widget(QtWidgets.QToolButton , 'tbSend' ) self.sbReason = self.find_widget(QtWidgets.QSpinBox , 'ReasonSpinBox' ) self.sbMinRORejectionRatioAlarmMin = self.find_widget(QtWidgets.QSpinBox , 'minRORejectionRatioAlarmMin' ) self.sbMinRORejectionRatioAlarmMax = self.find_widget(QtWidgets.QSpinBox , 'minRORejectionRatioAlarmMax' ) self.sbMinRORejectionRatioAlarmDef = self.find_widget(QtWidgets.QSpinBox , 'minRORejectionRatioAlarmDef' ) self.sbDisinfectionFrequencyMin = self.find_widget(QtWidgets.QSpinBox , 'disinfectionFrequencyMin' ) self.sbDisinfectionFrequencyMax = self.find_widget(QtWidgets.QSpinBox , 'disinfectionFrequencyMax' ) self.sbDisinfectionFrequencyDef = self.find_widget(QtWidgets.QSpinBox , 'disinfectionFrequencyDef' ) self.sbDisinfectionParametersCycleTimeMin = self.find_widget(QtWidgets.QSpinBox , 'disinfectionParametersCycleTimeMin' ) self.sbDisinfectionParametersCycleTimeMax = self.find_widget(QtWidgets.QSpinBox , 'disinfectionParametersCycleTimeMax' ) self.sbDisinfectionParametersCycleTimeDef = self.find_widget(QtWidgets.QSpinBox , 'disinfectionParametersCycleTimeDef' ) self.sbMaxBloodPumpStopTimeMin = self.find_widget(QtWidgets.QSpinBox , 'maxBloodPumpStopTimeMin' ) self.sbMaxBloodPumpStopTimeMax = self.find_widget(QtWidgets.QSpinBox , 'maxBloodPumpStopTimeMax' ) self.sbMaxBloodPumpStopTimeDef = self.find_widget(QtWidgets.QSpinBox , 'maxBloodPumpStopTimeDef' ) self.sbInletWaterCondLowThresholdMin = self.find_widget(QtWidgets.QSpinBox , 'inletWaterCondLowThresholdMin' ) self.sbInletWaterCondLowThresholdMax = self.find_widget(QtWidgets.QSpinBox , 'inletWaterCondLowThresholdMax' ) self.sbInletWaterCondLowThresholdDef = self.find_widget(QtWidgets.QSpinBox , 'inletWaterCondLowThresholdDef' ) self.sbInletWaterCondHighThresholdMin = self.find_widget(QtWidgets.QSpinBox , 'inletWaterCondHighThresholdMin' ) self.sbInletWaterCondHighThresholdMax = self.find_widget(QtWidgets.QSpinBox , 'inletWaterCondHighThresholdMax' ) self.sbInletWaterCondHighThresholdDef = self.find_widget(QtWidgets.QSpinBox , 'inletWaterCondHighThresholdDef' ) self.sbChlorineWaterSampleCheckMin = self.find_widget(QtWidgets.QSpinBox , 'chlorineWaterSampleCheckMin' ) self.sbChlorineWaterSampleCheckMax = self.find_widget(QtWidgets.QSpinBox , 'chlorineWaterSampleCheckMax' ) self.sbChlorineWaterSampleCheckDef = self.find_widget(QtWidgets.QSpinBox , 'chlorineWaterSampleCheckDef' ) self.cbWaterSampleTestResultRequiredDef = self.find_widget(QtWidgets.QComboBox , 'waterSampleTestResultRequiredDef' ) self.sbMinRORejectionRatioAlarmMinRejectionReason = self.find_widget(QtWidgets.QSpinBox , 'minRORejectionRatioAlarmMinRejectionReason' ) self.sbMinRORejectionRatioAlarmMaxRejectionReason = self.find_widget(QtWidgets.QSpinBox , 'minRORejectionRatioAlarmMaxRejectionReason' ) self.sbMinRORejectionRatioAlarmDefRejectionReason = self.find_widget(QtWidgets.QSpinBox , 'minRORejectionRatioAlarmDefRejectionReason' ) self.sbDisinfectionFrequencyMinRejectionReason = self.find_widget(QtWidgets.QSpinBox , 'disinfectionFrequencyMinRejectionReason' ) self.sbDisinfectionFrequencyMaxRejectionReason = self.find_widget(QtWidgets.QSpinBox , 'disinfectionFrequencyMaxRejectionReason' ) self.sbDisinfectionFrequencyDefRejectionReason = self.find_widget(QtWidgets.QSpinBox , 'disinfectionFrequencyDefRejectionReason' ) self.sbDisinfectionParametersCycleTimeMinRejectionReason = self.find_widget(QtWidgets.QSpinBox , 'disinfectionParametersCycleTimeMinRejectionReason' ) self.sbDisinfectionParametersCycleTimeMaxRejectionReason = self.find_widget(QtWidgets.QSpinBox , 'disinfectionParametersCycleTimeMaxRejectionReason' ) self.sbDisinfectionParametersCycleTimeDefRejectionReason = self.find_widget(QtWidgets.QSpinBox , 'disinfectionParametersCycleTimeDefRejectionReason' ) self.sbMaxBloodPumpStopTimeMinRejectionReason = self.find_widget(QtWidgets.QSpinBox , 'maxBloodPumpStopTimeMinRejectionReason' ) self.sbMaxBloodPumpStopTimeMaxRejectionReason = self.find_widget(QtWidgets.QSpinBox , 'maxBloodPumpStopTimeMaxRejectionReason' ) self.sbMaxBloodPumpStopTimeDefRejectionReason = self.find_widget(QtWidgets.QSpinBox , 'maxBloodPumpStopTimeDefRejectionReason' ) self.sbInletWaterCondLowThresholdMinRejectionReason = self.find_widget(QtWidgets.QSpinBox , 'inletWaterCondLowThresholdMinRejectionReason' ) self.sbInletWaterCondLowThresholdMaxRejectionReason = self.find_widget(QtWidgets.QSpinBox , 'inletWaterCondLowThresholdMaxRejectionReason' ) self.sbInletWaterCondLowThresholdDefRejectionReason = self.find_widget(QtWidgets.QSpinBox , 'inletWaterCondLowThresholdDefRejectionReason' ) self.sbInletWaterCondHighThresholdMinRejectionReason = self.find_widget(QtWidgets.QSpinBox , 'inletWaterCondHighThresholdMinRejectionReason' ) self.sbInletWaterCondHighThresholdMaxRejectionReason = self.find_widget(QtWidgets.QSpinBox , 'inletWaterCondHighThresholdMaxRejectionReason' ) self.sbInletWaterCondHighThresholdDefRejectionReason = self.find_widget(QtWidgets.QSpinBox , 'inletWaterCondHighThresholdDefRejectionReason' ) self.sbChlorineWaterSampleCheckMinRejectionReason = self.find_widget(QtWidgets.QSpinBox , 'chlorineWaterSampleCheckMinRejectionReason' ) self.sbChlorineWaterSampleCheckMaxRejectionReason = self.find_widget(QtWidgets.QSpinBox , 'chlorineWaterSampleCheckMaxRejectionReason' ) self.sbChlorineWaterSampleCheckDefRejectionReason = self.find_widget(QtWidgets.QSpinBox , 'chlorineWaterSampleCheckDefRejectionReason' ) self.sbWaterSampleTestResultRequiredDefRejectionReason = self.find_widget(QtWidgets.QSpinBox , 'waterSampleTestResultRequiredDefRejectionReason' ) def _init_connections(self): """ initializes the widgets connections :return: none """ self.tbSend .clicked .connect(self.do_send) def _init_widgets(self): """ initializes the widgets' properties :return: none """ self.sbReason .setValue(0) self.setup_spinbox(self.sbMinRORejectionRatioAlarmMin , 1, 1, 99, 1) self.setup_spinbox(self.sbMinRORejectionRatioAlarmMax , 99, 1, 99, 1) self.setup_spinbox(self.sbMinRORejectionRatioAlarmDef , 90, 1, 99, 1) self.setup_spinbox(self.sbDisinfectionFrequencyMin , 1, 1, 5, 1) self.setup_spinbox(self.sbDisinfectionFrequencyMax , 5, 1, 5, 1) self.setup_spinbox(self.sbDisinfectionFrequencyDef , 3, 1, 5, 1) self.setup_spinbox(self.sbDisinfectionParametersCycleTimeMin , 1, 1, 60, 1) self.setup_spinbox(self.sbDisinfectionParametersCycleTimeMax , 60, 1, 60, 1) self.setup_spinbox(self.sbDisinfectionParametersCycleTimeDef , 6300, 1, 60, 1) self.setup_spinbox(self.sbMaxBloodPumpStopTimeMin , 5, 5, 30, 1) self.setup_spinbox(self.sbMaxBloodPumpStopTimeMax , 30, 5, 30, 1) self.setup_spinbox(self.sbMaxBloodPumpStopTimeDef , 5, 5, 30, 1) self.setup_spinbox(self.sbInletWaterCondLowThresholdMin , 20, 20, 200, 10) self.setup_spinbox(self.sbInletWaterCondLowThresholdMax , 200, 20, 200, 10) self.setup_spinbox(self.sbInletWaterCondLowThresholdDef , 200, 20, 200, 10) self.setup_spinbox(self.sbInletWaterCondHighThresholdMin , 50, 20, 200, 10) self.setup_spinbox(self.sbInletWaterCondHighThresholdMax , 200, 20, 200, 10) self.setup_spinbox(self.sbInletWaterCondHighThresholdDef , 50, 20, 200, 10) self.setup_spinbox(self.sbChlorineWaterSampleCheckMin , 15, 15, 480, 5) self.setup_spinbox(self.sbChlorineWaterSampleCheckMax , 480, 15, 480, 5) self.setup_spinbox(self.sbChlorineWaterSampleCheckDef , 140, 15, 480, 5) comboList = ["disabled", "enabled"] self.cbWaterSampleTestResultRequiredDef.addItems(comboList) self.sbMinRORejectionRatioAlarmMinRejectionReason .setValue(0) self.sbMinRORejectionRatioAlarmMaxRejectionReason .setValue(0) self.sbMinRORejectionRatioAlarmDefRejectionReason .setValue(0) self.sbDisinfectionFrequencyMinRejectionReason .setValue(0) self.sbDisinfectionFrequencyMaxRejectionReason .setValue(0) self.sbDisinfectionFrequencyDefRejectionReason .setValue(0) self.sbDisinfectionParametersCycleTimeMinRejectionReason .setValue(0) self.sbDisinfectionParametersCycleTimeMaxRejectionReason .setValue(0) self.sbDisinfectionParametersCycleTimeDefRejectionReason .setValue(0) self.sbMaxBloodPumpStopTimeMinRejectionReason .setValue(0) self.sbMaxBloodPumpStopTimeMaxRejectionReason .setValue(0) self.sbMaxBloodPumpStopTimeDefRejectionReason .setValue(0) self.sbInletWaterCondLowThresholdMinRejectionReason .setValue(0) self.sbInletWaterCondLowThresholdMaxRejectionReason .setValue(0) self.sbInletWaterCondLowThresholdDefRejectionReason .setValue(0) self.sbInletWaterCondHighThresholdMinRejectionReason .setValue(0) self.sbInletWaterCondHighThresholdMaxRejectionReason .setValue(0) self.sbInletWaterCondHighThresholdDefRejectionReason .setValue(0) self.sbChlorineWaterSampleCheckMinRejectionReason .setValue(0) self.sbChlorineWaterSampleCheckMaxRejectionReason .setValue(0) self.sbChlorineWaterSampleCheckDefRejectionReason .setValue(0) self.sbWaterSampleTestResultRequiredDefRejectionReason .setValue(0) def setup_spinbox(self, vSpinBox, vInitialValue, vMin, vMax, vStep): vSpinBox.setRange(vMin, vMax) vSpinBox.setValue(vInitialValue) vSpinBox.setSingleStep(vStep) def getIntValue (self, message): val,self.index = conversions.bytearray_to_integer( message, self.index) return val @Slot() def handle_request(self, message, timestamp = 0.0): """ Called when the user requests to firmware from UI @return: None """ self.td_interface.td_advanced_institutional_response(self.sbReason .value(), self.sbMinRORejectionRatioAlarmMin .value(), self.sbMinRORejectionRatioAlarmMax .value(), self.sbMinRORejectionRatioAlarmDef .value(), self.sbDisinfectionFrequencyMin .value(), self.sbDisinfectionFrequencyMax .value(), self.sbDisinfectionFrequencyDef .value(), self.sbDisinfectionParametersCycleTimeMin .value(), self.sbDisinfectionParametersCycleTimeMax .value(), self.sbDisinfectionParametersCycleTimeDef .value(), self.sbMaxBloodPumpStopTimeMin .value(), self.sbMaxBloodPumpStopTimeMax .value(), self.sbMaxBloodPumpStopTimeDef .value(), self.sbInletWaterCondLowThresholdMin .value(), self.sbInletWaterCondLowThresholdMax .value(), self.sbInletWaterCondLowThresholdDef .value(), self.sbInletWaterCondHighThresholdMin .value(), self.sbInletWaterCondHighThresholdMax .value(), self.sbInletWaterCondHighThresholdDef .value(), self.sbChlorineWaterSampleCheckMin .value(), self.sbChlorineWaterSampleCheckMax .value(), self.sbChlorineWaterSampleCheckDef .value(), self.cbWaterSampleTestResultRequiredDef.currentIndex()) @Slot() def handle_adjust_request(self, message, timestamp = 0.0): """ Called when the user requests to firmware from UI @return: None """ message = message['message'] self.index = MsgFieldPositions.START_POS_FIELD_1 accepted = ( self.sbMinRORejectionRatioAlarmMinRejectionReason .value() + self.sbMinRORejectionRatioAlarmMaxRejectionReason .value() + self.sbMinRORejectionRatioAlarmDefRejectionReason .value() + self.sbDisinfectionFrequencyMinRejectionReason .value() + self.sbDisinfectionFrequencyMaxRejectionReason .value() + self.sbDisinfectionFrequencyDefRejectionReason .value() + self.sbDisinfectionParametersCycleTimeMinRejectionReason .value() + self.sbDisinfectionParametersCycleTimeMaxRejectionReason .value() + self.sbDisinfectionParametersCycleTimeDefRejectionReason .value() + self.sbMaxBloodPumpStopTimeMinRejectionReason .value() + self.sbMaxBloodPumpStopTimeMaxRejectionReason .value() + self.sbMaxBloodPumpStopTimeDefRejectionReason .value() + self.sbInletWaterCondLowThresholdMinRejectionReason .value() + self.sbInletWaterCondLowThresholdMaxRejectionReason .value() + self.sbInletWaterCondLowThresholdDefRejectionReason .value() + self.sbInletWaterCondHighThresholdMinRejectionReason .value() + self.sbInletWaterCondHighThresholdMaxRejectionReason .value() + self.sbInletWaterCondHighThresholdDefRejectionReason .value() + self.sbChlorineWaterSampleCheckMinRejectionReason .value() + self.sbChlorineWaterSampleCheckMaxRejectionReason .value() + self.sbChlorineWaterSampleCheckDefRejectionReason .value() + self.sbWaterSampleTestResultRequiredDefRejectionReason .value()) == 0 self.td_interface.td_Adjust_Advanced_Institutional_Records( 1 if accepted else 0, self.sbMinRORejectionRatioAlarmMinRejectionReason .value(), self.sbMinRORejectionRatioAlarmMaxRejectionReason .value(), self.sbMinRORejectionRatioAlarmDefRejectionReason .value(), self.sbDisinfectionFrequencyMinRejectionReason .value(), self.sbDisinfectionFrequencyMaxRejectionReason .value(), self.sbDisinfectionFrequencyDefRejectionReason .value(), self.sbDisinfectionParametersCycleTimeMinRejectionReason .value(), self.sbDisinfectionParametersCycleTimeMaxRejectionReason .value(), self.sbDisinfectionParametersCycleTimeDefRejectionReason .value(), self.sbMaxBloodPumpStopTimeMinRejectionReason .value(), self.sbMaxBloodPumpStopTimeMaxRejectionReason .value(), self.sbMaxBloodPumpStopTimeDefRejectionReason .value(), self.sbInletWaterCondLowThresholdMinRejectionReason .value(), self.sbInletWaterCondLowThresholdMaxRejectionReason .value(), self.sbInletWaterCondLowThresholdDefRejectionReason .value(), self.sbInletWaterCondHighThresholdMinRejectionReason .value(), self.sbInletWaterCondHighThresholdMaxRejectionReason .value(), self.sbInletWaterCondHighThresholdDefRejectionReason .value(), self.sbChlorineWaterSampleCheckMinRejectionReason .value(), self.sbChlorineWaterSampleCheckMaxRejectionReason .value(), self.sbChlorineWaterSampleCheckDefRejectionReason .value(), self.sbWaterSampleTestResultRequiredDefRejectionReason .value() ) self.sbMinRORejectionRatioAlarmMin .setValue(self.getIntValue(message)) self.sbMinRORejectionRatioAlarmMax .setValue(self.getIntValue(message)) self.sbMinRORejectionRatioAlarmDef .setValue(self.getIntValue(message)) self.sbDisinfectionFrequencyMin .setValue(self.getIntValue(message)) self.sbDisinfectionFrequencyMax .setValue(self.getIntValue(message)) self.sbDisinfectionFrequencyDef .setValue(self.getIntValue(message)) self.sbDisinfectionParametersCycleTimeMin .setValue(self.getIntValue(message)) self.sbDisinfectionParametersCycleTimeMax .setValue(self.getIntValue(message)) self.sbDisinfectionParametersCycleTimeDef .setValue(self.getIntValue(message)) self.sbMaxBloodPumpStopTimeMin .setValue(self.getIntValue(message)) self.sbMaxBloodPumpStopTimeMax .setValue(self.getIntValue(message)) self.sbMaxBloodPumpStopTimeDef .setValue(self.getIntValue(message)) self.sbInletWaterCondLowThresholdMin .setValue(self.getIntValue(message)) self.sbInletWaterCondLowThresholdMax .setValue(self.getIntValue(message)) self.sbInletWaterCondLowThresholdDef .setValue(self.getIntValue(message)) self.sbInletWaterCondHighThresholdMin .setValue(self.getIntValue(message)) self.sbInletWaterCondHighThresholdMax .setValue(self.getIntValue(message)) self.sbInletWaterCondHighThresholdDef .setValue(self.getIntValue(message)) self.sbChlorineWaterSampleCheckMin .setValue(self.getIntValue(message)) self.sbChlorineWaterSampleCheckMax .setValue(self.getIntValue(message)) self.sbChlorineWaterSampleCheckDef .setValue(self.getIntValue(message)) self.cbWaterSampleTestResultRequiredDef .setCurrentIndex((self.getIntValue(message))) @Slot() def do_send(self): """ the slot for send button :return: none """ self.handle_request(0)