class StuffDictionaryModule(QWidget, Ui_Form): def __init__(self, parent=None): super(StuffDictionaryModule, self).__init__(parent) self.setupUi(self) # 数据库操作类 self.SC = StuffController() if '1' not in user.powers: self.close() if user.powers['1'] == 0: self.close() self.power = '{:03b}'.format(user.powers['1']) self.stufftype = 0 # 隐藏第一列的id self.treeWidget_stufflist.hideColumn(0) # 显示物料列表 self.get_stufflist() def get_stufflist(self): self.treeWidget_stufflist.clear() condition = {'stufftype' : self.stufftype} res = self.SC.get_data(0, False, *VALUES_TUPLE_SD, **condition) if not len(res): self.label_count.setText("共0条记录") self.label_count.setText("共%s条记录" % len(res)) for item in res: qtreeitem = QTreeWidgetItem(self.treeWidget_stufflist) qtreeitem.setText(0, str(item["autoid"])) qtreeitem.setText(1, item["stuffid"]) qtreeitem.setText(2, item["stuffname"]) qtreeitem.setText(3, item["kind"]) qtreeitem.setText(4, item["spec"]) qtreeitem.setText(5, item["package"]) qtreeitem.setText(6, item["allowno"]) qtreeitem.setText(7, item["storage"]) for i in range(1, 8): self.treeWidget_stufflist.resizeColumnToContents(i) if self.treeWidget_stufflist.columnWidth(i) > 200: self.treeWidget_stufflist.setColumnWidth(i, 200) elif self.treeWidget_stufflist.columnWidth(i) < 120: self.treeWidget_stufflist.setColumnWidth(i, 120) # 物料列表双击功能 @pyqtSlot(QTreeWidgetItem, int) def on_treeWidget_stufflist_itemDoubleClicked(self, qtreeitem, p_int): if self.power[1] == '0': return autoid = int(qtreeitem.text(0)) # 物料详细列表 detail = EditStuffDetailModule(autoid, self) detail.accepted.connect(self.get_stufflist) # 修改了物料记录,刷新列表 detail.show() @pyqtSlot(int) def on_tabWidget_currentChanged(self, p_int): getattr(self, 'tab_' + str(p_int)).setLayout(self.gridLayout_2) self.stufftype = p_int self.get_stufflist() @pyqtSlot(QPoint) def on_treeWidget_stufflist_customContextMenuRequested(self, pos): current_item = self.treeWidget_stufflist.currentItem() global_pos = self.treeWidget_stufflist.mapToGlobal(pos) menu = QMenu() action_1 = menu.addAction("增加") action_2 = menu.addAction("修改") action_3 = menu.addAction("删除") action = menu.exec(global_pos) if action == action_1: detail = EditStuffDetailModule(parent=self) detail.accepted.connect(self.get_stufflist) detail.show() elif action == action_2: if current_item is None: return id = int(current_item.text(0)) detail = EditStuffDetailModule(id, self) detail.accepted.connect(self.get_stufflist) detail.show() elif action == action_3: if current_item is None: return id = int(current_item.text(0)) condition = {'autoid': id} self.SC.delete_data(0, condition) self.get_stufflist()
class EditStuffDetailModule(QDialog, Ui_Dialog): def __init__(self, autoid=None, parent=None): super(EditStuffDetailModule, self).__init__(parent) self.setupUi(self) self.autoid = autoid self.SC = StuffController() self.LC = LabrecordsController() self.PC = ProductController() self.SPC = SupplyerController() self.ori_detail = {} self.new_detail = {} self.get_detail() if len(self.ori_detail): stufftype = self.ori_detail['stufftype'] if stufftype == 1: self.tab.removeTab(4) self.tab.removeTab(1) else: self.tab.removeTab(3) self.tab.removeTab(2) self.get_formula() self.get_checkitem(0, self.treeWidget_checkitem) self.get_checkitem(2, self.treeWidget_precheckitem) self.get_stuffsupplyer() def get_detail(self): if self.autoid is None: self.tab.setTabVisible(1, False) self.tab.setTabVisible(2, False) self.tab.setTabVisible(3, False) self.tab.setTabVisible(4, False) return condition = {'autoid': self.autoid} res = self.SC.get_data(0, False, *VALUES_TUPLE_SD, **condition) if len(res) != 1: return self.ori_detail = res[0] self.comboBox_stufftype.setCurrentIndex(self.ori_detail['stufftype']) self.lineEdit_stuffid.setText(self.ori_detail['stuffid']) self.lineEdit_stuffname.setText(self.ori_detail['stuffname']) self.lineEdit_kind.setText(self.ori_detail['kind']) self.lineEdit_allowno.setText(self.ori_detail['allowno']) self.lineEdit_inputcode.setText(self.ori_detail['inputcode']) self.lineEdit_spec.setText(self.ori_detail['spec']) self.comboBox_packageLv.setCurrentIndex(self.ori_detail['packagelv']) self.lineEdit_package.setText(self.ori_detail['package']) self.comboBox_midcheckunit.setCurrentText( self.ori_detail['midcheckunit']) self.comboBox_prodcheckunit.setCurrentText( self.ori_detail['prodcheckunit']) self.lineEdit_expired.setText(str(self.ori_detail['expireddays'])) self.lineEdit_storage.setText(self.ori_detail['storage']) self.lineEdit_lowlimit.setText(str(self.ori_detail['lowlimit'])) self.lineEdit_upperlimit.setText(str(self.ori_detail['upperlimit'])) self.lineEdit_recheck.setText(str(self.ori_detail['countercheckdays'])) self.lineEdit_cunit.setText(self.ori_detail['cunit']) def get_checkitem(self, itemtype, tree): tree.clear() condition = {'stuffid': self.autoid, 'itemtype': itemtype} res = self.LC.get_data(4, False, *VALUES_TUPLE_CI, **condition). \ order_by('seqid') if not len(res): return for item in res: qtreeitem = QTreeWidgetItem(tree) qtreeitem.setText(0, str(item['autoid'])) qtreeitem.setText(1, str(item['seqid'])) qtreeitem.setText(2, item['kind']) qtreeitem.setText(3, item['itemname']) qtreeitem.setText(4, item['referencevalue']) qtreeitem.setText(5, RESTYPE[item['restype']]) qtreeitem.setText(6, PUTINTYPE[item['putintype']]) for i in range(1, 7): tree.resizeColumnToContents(i) def get_formula(self): if self.autoid is None: return self.treeWidget_formula.clear() condition = {'prodid': self.autoid, 'prodtype': 1} res = self.PC.get_data(6, False, *VALUES_TUPLE_FL, **condition) if not len(res): return for item in res: qtreeitem = QTreeWidgetItem(self.treeWidget_formula) qtreeitem.setText(0, str(item['autoid'])) qtreeitem.setText(1, STUFFTYPE[item['stufftype']]) qtreeitem.setText(2, item['stuffkind']) qtreeitem.setText(3, item['formula']) qtreeitem.setText(4, item['presexpression']) qtreeitem.setText(5, item['presunit']) qtreeitem.setText(6, item['pracexpression']) qtreeitem.setText(7, item['pracunit']) qtreeitem.setText(8, item['drawexpression']) qtreeitem.setText(9, item['drawunit']) qtreeitem.setText(10, str(item['precision'])) qtreeitem.setText(11, str(item['loss']) + "%") for i in range(1, 12): self.treeWidget_formula.resizeColumnToContents(i) def get_stuffsupplyer(self): self.treeWidget_stuffsupplyer.clear() condition = {'sdid_id': self.autoid} res = self.SPC.get_data(1, **condition) if not len(res): return for item in res: qtreeitem = QTreeWidgetItem(self.treeWidget_stuffsupplyer) qtreeitem.setText(0, str(item.autoid)) qtreeitem.setText(1, item.spid.supid) qtreeitem.setText(2, item.spid.supname) qtreeitem.setText(3, item.producer) for i in range(1, 4): self.treeWidget_stuffsupplyer.resizeColumnToContents(i) @pyqtSlot(QTreeWidgetItem, int) def on_treeWidget_precheckitem_itemDoubleClicked(self, p_int): self.on_checkitem_itemDoubleClicked(self.treeWidget_precheckitem, 2) @pyqtSlot(QTreeWidgetItem, int) def on_treeWidget_checkitem_itemDoubleClicked(self, p_int): self.on_checkitem_itemDoubleClicked(self.treeWidget_checkitem, 0) # 原料检验项目,双击打开详细信息 def on_checkitem_itemDoubleClicked(self, tree, itemtype): # if self.power[1] == '0': # return detail = SetCheckItem(self, tree.currentItem().text(0)) detail.accepted.connect(lambda: self.get_checkitem(itemtype, tree)) detail.show() @pyqtSlot(QPoint) def on_treeWidget_precheckitem_customContextMenuRequested(self, pos): self.on_checkitem_customContextMenuRequested( self.treeWidget_precheckitem, 2, pos) @pyqtSlot(QPoint) def on_treeWidget_checkitem_customContextMenuRequested(self, pos): self.on_checkitem_customContextMenuRequested(self.treeWidget_checkitem, 0, pos) # 检验项目的右键菜单功能 def on_checkitem_customContextMenuRequested(self, tree, itemtype, pos): # if self.power[1] == '0': # return menu = QMenu() button1 = menu.addAction("增加") button2 = menu.addAction("修改") button3 = menu.addAction("删除") button4 = menu.addAction("复制") button5 = menu.addAction("黏贴") global_pos = tree.mapToGlobal(pos) action = menu.exec(global_pos) # 增加 if action == button1: set_check_item = SetCheckItem(self, prodid=self.autoid, itemtype=itemtype) set_check_item.accepted.connect( lambda: self.get_checkitem(itemtype, tree)) set_check_item.show() # 修改 elif action == button2: current_item = tree.currentItem() if current_item is None: return id = int(current_item.text(0)) set_check_item = SetCheckItem(self, autoid=id) set_check_item.accepted.connect( lambda: self.get_checkitem(itemtype, tree)) set_check_item.show() # 删除 elif action == button3: select_item = tree.selectedItems() checkitem_autoid = [] for item in select_item: checkitem_autoid.append(item.text(0)) condition = {'autoid__in': checkitem_autoid} self.LC.delete_data(4, condition) self.get_checkitem(itemtype, tree) # 复制 elif action == button4: clipboard = QApplication.clipboard() items = tree.selectedItems() select_item = tree.mimeData(items) clipboard.setMimeData(select_item) # 黏贴 elif action == button5: try: clipboard = QApplication.clipboard() data = clipboard.mimeData() # 获取当前行数,加1即为新的行号 count = tree.topLevelItemCount() res = tree.dropMimeData(tree.invisibleRootItem(), count + 1, data, Qt.CopyAction) finnal_index = tree.topLevelItemCount() if res: while count < finnal_index: tree_item = tree.topLevelItem(count) if tree_item is None: raise AttributeError detail = dict() detail["seqid"] = tree_item.text(1) detail["kind"] = tree_item.text(2) detail["itemname"] = tree_item.text(3) detail["referencevalue"] = tree_item.text(4) detail["restype"] = RESTYPE.index(tree_item.text(5)) detail["putintype"] = PUTINTYPE.index( tree_item.text(6)) detail["stuffid"] = self.autoid detail["itemtype"] = itemtype new_item = self.LC.update_data(4, **detail) tree_item.setText(0, str(new_item.autoid)) count += 1 except Exception as e: pass else: pass @pyqtSlot(QPoint) def on_treeWidget_formula_customContextMenuRequested(self, pos): # if self.power[1] == '0': # return current_item = self.treeWidget_formula.currentItem() menu = QMenu() action_1 = menu.addAction("增加") action_2 = menu.addAction("修改") action_3 = menu.addAction("删除") global_pos = self.treeWidget_formula.mapToGlobal(pos) action = menu.exec(global_pos) if action == action_1: detail = EditFormulaModule(prodid=self.autoid, prodtype=1, parent=self) detail.accepted.connect(self.get_formula) detail.show() elif action == action_2: if current_item is None: return id = int(current_item.text(0)) detail = EditFormulaModule(autoid=id, parent=self) detail.accepted.connect(self.get_formula) detail.show() elif action == action_3: if current_item is None: return id = int(current_item.text(0)) condition = {'autoid': id} self.PC.delete_data(6, condition) self.get_formula() @pyqtSlot(QTreeWidgetItem, int) def on_treeWidget_formula_itemDoubleClicked(self, qtreeitem, p_int): # if self.power[1] == '0': # return id = int(qtreeitem.text(0)) detail = EditFormulaModule(autoid=id, parent=self) detail.accepted.connect(self.get_formula) detail.show() @pyqtSlot(QTreeWidgetItem, int) def on_treeWidget_stuffsupplyer_itemDoubleClicked(self, qtreeitem, p_int): id = int(qtreeitem.text(0)) detail = StuffSupplyerModule(autoid=id, parent=self) detail.accepted.connect(self.get_stuffsupplyer) detail.show() # 物料供应商和生产厂家的右键菜单功能 @pyqtSlot(QPoint) def on_treeWidget_stuffsupplyer_customContextMenuRequested(self, pos): # 返回调用者的对象 current_item = self.treeWidget_stuffsupplyer.currentItem() menu = QMenu() button1 = menu.addAction("增加") button2 = menu.addAction("修改") button3 = menu.addAction("删除") button4 = menu.addAction("复制") button5 = menu.addAction("黏贴") global_pos = self.treeWidget_stuffsupplyer.mapToGlobal(pos) action = menu.exec(global_pos) # 增加 if action == button1: detail = StuffSupplyerModule(sdid=self.autoid, parent=self) detail.accepted.connect(self.get_stuffsupplyer) detail.show() # 修改 elif action == button2: if current_item is None: return id = int(current_item.text(0)) detail = StuffSupplyerModule(autoid=id, parent=self) detail.accepted.connect(self.get_stuffsupplyer) detail.show() # 删除 elif action == button3: select_item = self.treeWidget_stuffsupplyer.selectedItems() item_autoid = [] for item in select_item: item_autoid.append(int(item.text(0))) self.SPC.delete_data(1, *item_autoid) self.get_stuffsupplyer() # 复制 elif action == button4: clipboard = QApplication.clipboard() # 当前选择的项目 items = self.treeWidget_stuffsupplyer.selectedItems() # 把项目转为Mime对象 select_item = self.treeWidget_stuffsupplyer.mimeData(items) # 把Mime对象存入剪切板 clipboard.setMimeData(select_item) # 黏贴 elif action == button5: clipboard = QApplication.clipboard() # 获取剪切板里的内容 data = clipboard.mimeData() # 获取当前行数,加1即为新的行号 count = self.treeWidget_stuffsupplyer.topLevelItemCount() # dropMineData,把Mime对象转回Qtreeitem # 第一个参数:要添加到的父节点 # 第二个参数:行号 # 第三个参数:Mime数据 res = self.treeWidget_stuffsupplyer.dropMimeData( self.treeWidget_stuffsupplyer.invisibleRootItem(), count + 1, data, Qt.CopyAction) # 黏贴完成后的行数 finnal_index = self.treeWidget_stuffsupplyer.topLevelItemCount() if res: # 把黏贴的数据加入数据库中 # 数据从count到finnal_index即为黏贴的行号 while count < finnal_index: tree_item = self.treeWidget_stuffsupplyer.topLevelItem( count) if tree_item is None: return condition = {'autoid': int(tree_item.text(0))} res = self.SPC.get_data(1, **condition) if len(res) != 1: return ori_data = res[0] detail = dict() detail["spid_id"] = ori_data.spid_id detail["producer"] = ori_data.producer detail["sdid_id"] = self.autoid self.SPC.update_data(1, **detail) count += 1 self.get_stuffsupplyer() else: pass # 修改种类时触发 @pyqtSlot(int) def on_comboBox_stufftype_currentIndexChanged(self, p_int): try: if p_int != int(self.ori_detail['stufftype']): self.new_detail['stufftype'] = p_int else: try: del self.new_detail['stufftype'] except KeyError: pass except KeyError: self.new_detail['stufftype'] = p_int # 修改编号时触发 @pyqtSlot(str) def on_lineEdit_stuffid_textChanged(self, p_str): try: if p_str != self.ori_detail['stuffid']: self.new_detail['stuffid'] = p_str else: try: del self.new_detail['stuffid'] except KeyError: pass except KeyError: self.new_detail['stuffid'] = p_str # 修改名称时触发 @pyqtSlot(str) def on_lineEdit_stuffname_textChanged(self, p_str): try: if p_str != self.ori_detail['stuffname']: self.new_detail['stuffname'] = p_str self.lineEdit_inputcode.setText( Inputcode.make_inputcode(p_str)) self.lineEdit_kind.setText(p_str) else: try: del self.new_detail['stuffname'] except KeyError: pass except KeyError: self.new_detail['stuffname'] = p_str # 修改种类时触发 @pyqtSlot(str) def on_lineEdit_kind_textChanged(self, p_str): try: if p_str != self.ori_detail['kind']: self.new_detail['kind'] = p_str else: try: del self.new_detail['kind'] except KeyError: pass except KeyError: self.new_detail['kind'] = p_str # 修改批准文号时触发 @pyqtSlot(str) def on_lineEdit_allowno_textChanged(self, p_str): try: if p_str != self.ori_detail['allowno']: self.new_detail['allowno'] = p_str else: try: del self.new_detail['allowno'] except KeyError: pass except KeyError: self.new_detail['allowno'] = p_str # 修改输入码时触发 @pyqtSlot(str) def on_lineEdit_inputcode_textChanged(self, p_str): try: if p_str != self.ori_detail['inputcode']: self.new_detail['inputcode'] = p_str else: try: del self.new_detail['inputcode'] except KeyError: pass except KeyError: self.new_detail['inputcode'] = p_str # 修改含量规格时触发 @pyqtSlot(str) def on_lineEdit_spec_textChanged(self, p_str): try: if p_str != self.ori_detail['spec']: self.new_detail['spec'] = p_str else: try: del self.new_detail['spec'] except KeyError: pass except KeyError: self.new_detail['spec'] = p_str # 修改包装级别时触发 @pyqtSlot(int) def on_comboBox_packageLv_currentIndexChanged(self, p_int): try: if p_int != self.ori_detail['packagelv']: self.new_detail['packagelv'] = p_int else: try: del self.new_detail['packagelv'] except KeyError: pass except KeyError: self.new_detail['packagelv'] = p_int # 修改包装情况时触发 @pyqtSlot() def on_lineEdit_package_editingFinished(self): p_str = self.lineEdit_package.text() try: if p_str != self.ori_detail['package']: if self.set_package_rate(p_str): self.new_detail['package'] = p_str else: try: del self.new_detail['package'] except KeyError: pass except KeyError: if self.set_package_rate(p_str): self.new_detail['package'] = p_str def set_package_rate(self, package): lv = self.comboBox_packageLv.currentIndex() + 1 items = re.split(r'\*|×|x|X', package) if len(items) != lv: msg = MessageBox(title="错误1!", informative="包装比例错误!") msg.exec() return False num_tuple = ('basicamount', 'spamount', 'mpamount') unit_tuple = ('basicunit', 'spunit', 'mpunit', 'bpunit') try: for i in range(len(items)): values = re.findall(r'\d+|\w+', items[i]) self.new_detail[num_tuple[i]] = values[0] self.new_detail[unit_tuple[i]] = values[1] self.new_detail[unit_tuple[i + 1]] = values[2] return True except: msg = MessageBox(title="错误2!", informative="包装比例错误!") msg.exec() return False # 修改入库单位时触发 @pyqtSlot(str) def on_comboBox_midcheckunit_currentTextChanged(self, p_str): try: if p_str != self.ori_detail['midcheckunit']: self.new_detail['midcheckunit'] = p_str else: try: del self.new_detail['midcheckunit'] except KeyError: pass except KeyError: self.new_detail['midcheckunit'] = p_str # 修改取样单位时触发 @pyqtSlot(str) def on_comboBox_prodcheckunit_currentTextChanged(self, p_str): try: if p_str != self.ori_detail['prodcheckunit']: self.new_detail['prodcheckunit'] = p_str else: try: del self.new_detail['prodcheckunit'] except KeyError: pass except KeyError: self.new_detail['prodcheckunit'] = p_str # 修改库存上限时触发 @pyqtSlot(str) def on_lineEdit_upperlimit_textChanged(self, p_str): p_int = float(p_str) try: if p_int != self.ori_detail['upperlimit']: self.new_detail['upperlimit'] = p_int else: try: del self.new_detail['upperlimit'] except KeyError: pass except KeyError: self.new_detail['upperlimit'] = p_int # 修改库存下限时触发 @pyqtSlot(str) def on_lineEdit_lowlimit_textChanged(self, p_str): p_int = float(p_str) try: if p_int != self.ori_detail['lowlimit']: self.new_detail['lowlimit'] = p_int else: try: del self.new_detail['lowlimit'] except KeyError: pass except KeyError: self.new_detail['lowlimit'] = p_int # 修改复检天数时触发 @pyqtSlot(str) def on_lineEdit_recheck_textChanged(self, p_str): p_int = int(p_str) try: if p_int != self.ori_detail['countercheckdays']: self.new_detail['countercheckdays'] = p_int else: try: del self.new_detail['countercheckdays'] except KeyError: pass except KeyError: self.new_detail['countercheckdays'] = p_int # 修改有效期时触发 @pyqtSlot(str) def on_lineEdit_expired_textChanged(self, p_str): p_int = int(p_str) try: if p_int != self.ori_detail['expireddays']: self.new_detail['expireddays'] = p_int else: try: del self.new_detail['expireddays'] except KeyError: pass except KeyError: self.new_detail['expireddays'] = p_int # 修改效价单位时触发 @pyqtSlot(str) def on_lineEdit_cunit_textChanged(self, p_int): try: if p_int != self.ori_detail['cunit']: self.new_detail['cunit'] = p_int else: try: del self.new_detail['cunit'] except KeyError: pass except KeyError: self.new_detail['cunit'] = p_int # 修改储存条件时触发 @pyqtSlot(str) def on_lineEdit_storage_textChanged(self, p_int): try: if p_int != self.ori_detail['storage']: self.new_detail['storage'] = p_int else: try: del self.new_detail['storage'] except KeyError: pass except KeyError: self.new_detail['storage'] = p_int # 修改生产线和车间时触发 @pyqtSlot() def on_toolButton_workshop_clicked(self): setpl = SetProductLine(parent=self, pltype=1) setpl.select_line_signal.connect(self.setproductline) setpl.show() def setproductline(self, linedetail: dict): try: if linedetail['autoid'] != self.ori_detail['plid']: self.new_detail['plid'] = linedetail['autoid'] self.toolButton_workshop.setText(linedetail['deptname']) self.label_productionline.setText(linedetail['linename']) else: try: del self.new_detail['plid'] except KeyError: pass except KeyError: self.new_detail['plid'] = linedetail['autoid'] self.toolButton_workshop.setText(linedetail['deptname']) self.label_productionline.setText(linedetail['linename']) # 确认 @pyqtSlot() def on_pushButton_accept_clicked(self): if len(self.new_detail): if self.autoid is None: res = self.SC.update_data(0, **self.new_detail) self.autoid = res.autoid else: condition = {'autoiod': self.autoid} self.SC.update_data(0, condition, **self.new_detail) self.accept() # 取消 @pyqtSlot() def on_pushButton_cancel_clicked(self): self.close()
class LabrecordsController(object): def __init__(self): self.SFC = SelfdefinedformatController() self.EC = EquipmentController() self.SC = StuffController() self.PC = ProductController() def get_labrecord(self, flag=False, *args, **kwargs): return LabModel.get_labrecord(flag, *args, **kwargs) def get_labitem(self, flag=False, *args, **kwargs): return LabModel.get_labitem(flag, *args, **kwargs) def get_labimages(self, flag=False, kind=2, scid=0): values_list_rela = [ 'autoid', 'title', 'imageid', 'creatorid', 'creatorname', 'createdate' ] key_dict_rela = {'kind': kind, 'scid': scid} res = ImagesModel.get_rela(flag, *values_list_rela, **key_dict_rela) if not len(res): return [] img_list = [] for item in res: img_list.append(item['imageid']) values_list_img = ['autoid', 'img', 'ext'] key_dict_img = {'autoid__in': img_list} image_list = ImagesModel.get_img(flag, *values_list_img, **key_dict_img) for it in res: for value in image_list: if it['imageid'] == value['autoid']: it.update({'image': value['img'], 'ext': value['ext']}) break return res def select_oricheckpaper(self, dictid, itemtype=0): if not dictid: return [] if itemtype in (0, 1, 2): condition = {'stuffid': dictid} res = self.SC.get_data(0, True, *VALUES_TUPLE_ID, **condition) if not len(res): return [] id = res[0] elif itemtype in (3, 4, 5, 6): condition = {'prodid': dictid} res = self.PC.get_data(1, True, *VALUES_TUPLE_ID, **condition) if not len(res): return [] id = res[0] else: id = int(dictid) key_dict = {'dictid': id, 'itemtype': itemtype} sdfid_list = LabModel.get_oricheckpapersetting(True, *VALUES_TUPLE_SD, **key_dict) if len(sdfid_list): values_list_sdf = ['autoid', 'kind', 'formatname'] key_dict_sdf = {'autoid__in': sdfid_list} return self.SFC.get_selfdefinedformat(False, *values_list_sdf, **key_dict_sdf) else: return [] def get_selfdefineformat(self, flag=False, *args, **kwargs): return self.SFC.get_selfdefinedformat(False, *args, **kwargs) def get_oricheckpaper(self, flag=False, *args, **kwargs): return LabModel.get_oricheckpaper(flag, *args, **kwargs) def get_paperno(self, lrid): return LabModel.get_paperno(lrid) def update_labrecord(self, autoid=0, *args, **kwargs): return LabModel.update_labrecord(autoid, *args, **kwargs) def delete_labrecord(self, autoid=0, *args, **kwargs): return LabModel.delete_labrecord(autoid, *args, **kwargs) def update_labitem(self, autoid=0, *args, **kwargs): return LabModel.update_labitem(autoid, *args, **kwargs) def delete_labitem(self, autoid=0, *args, **kwargs): return LabModel.delete_labitem(autoid, *args, **kwargs) def update_labimages(self, relakwargs, imgkwargs, relaid=0, imgid=0): return ImagesModel.update_img(relakwargs, imgkwargs, relaid, imgid) def create_oricheckpaper(self, opid, op_detail, sdfid, sdf_detail): with transaction.atomic(): p1 = transaction.savepoint() condition = {'autoid': sdfid} res = self.SFC.get_data(0, False, *VALUES_TUPLE_SDF, **condition) if not len(res): transaction.savepoint_rollback(p1) return False sdf_data = { 'formname': res[0]['formatname'], 'formcontent': res[0]['format'] } sdf_data.update(sdf_detail) oripaper = self.update_data(2, **sdf_data) condition_2 = {'opid_id': opid} res_2 = self.get_data(8, False, **condition_2) for item in res_2: eqrun_data = { 'eqno': item.eqid.eqno, 'rtype': 1, 'pid': oripaper.autoid } eqrun_data.update(op_detail) self.EC.update_data(1, **eqrun_data) return oripaper def delete_labimages(self, relaid, imgid): return ImagesModel.delete_img(relaid, imgid) def delete_oricheckpaper(self, id): with transaction.atomic(): p1 = transaction.savepoint() condition = {'autoid': id} self.delete_data(2, **condition) condition_eqrun = {'pid': id, 'rtype': 1} self.EC.delete_data(1, **condition_eqrun) return True def get_data(self, table_num: int, display_flag=False, *args, **kwargs): table_str = TABLE_SET[table_num][0] err_msg = "查询" + TABLE_SET[table_num][1] return LabModel.get_data(table_str, err_msg, display_flag, *args, **kwargs) def update_data(self, table_num: int, condition={}, *args, **kwargs): table_str = TABLE_SET[table_num][0] err_msg = "更新" + TABLE_SET[table_num][1] return LabModel.update_data(table_str, err_msg, condition, *args, **kwargs) def delete_data(self, table_num: int, condition={}, *args, **kwargs): table_str = TABLE_SET[table_num][0] err_msg = "删除" + TABLE_SET[table_num][1] return LabModel.delete_data(table_str, err_msg, condition, *args, **kwargs) def create_labrecord(self, checkitem_id, itemtype, date, *args, **kwargs): with transaction.atomic(): p1 = transaction.savepoint() new_labrecor = self.update_data(0, **kwargs) lrid = new_labrecor.autoid key_dict_checkitem = { 'stuffid': checkitem_id, 'itemtype': itemtype } checkitems = self.get_data(4, False, *VALUES_TUPLE_CHECKITEM, **key_dict_checkitem) for item in checkitems: kwargs_checkitem = { 'lrid': lrid, 'seqid': item['seqid'], 'itemname': item['itemname'], 'kind': item['kind'], 'referencevalue': item['referencevalue'], 'labvalue': item['referencevalue'], 'putintype': item['putintype'], 'startdate': date, 'enddate': date, 'checked': 2 } self.update_data(1, **kwargs_checkitem) return lrid def delete_labrecord_and_detail(self, lrid=0, *args, **kwargs): with transaction.atomic(): p1 = transaction.savepoint() if lrid != 0: condition_lr = {'autoid': lrid} condition_detail = {'autoid': lrid} else: condition_lr = {'autoid__in': args} condition_detail = {'autoid__in': args} self.delete_data(0, condition_lr) self.delete_data(1, condition_detail) self.delete_data(2, condition_detail) def delete_sample_record(self, srid): with transaction.atomic(): p1 = transaction.savepoint() condition = {'srid_id': srid} lrid_list = self.get_data(7, False, **condition).extra( select={ 'lrid': 'Labrecords.autoid' }, tables=['Labrecords'], where=[ 'Labrecords.ciid=Observationrecords.autoid', 'Labrecords.labtype=6' ]).values_list(*VALUES_TUPLE_OB, flat=True) if len(lrid_list): self.delete_labrecord_and_detail(*lrid_list) condition = {'autoid': srid} self.delete_data(6, condition)
class CheckreportModule(QMainWindow, Ui_MainWindow): accepted = pyqtSignal() def __init__(self, autoid, is_view=False, parent=None): super(CheckreportModule, self).__init__(parent) self.setupUi(self) if is_view: self.power = '000' else: if '8' not in user.powers: self.close() if user.powers['8'] == 0: self.close() self.power = '{:03b}'.format(user.powers['8']) if self.power[1] == '0': self.pushButton_save.setVisible(False) self.pushButton_accept.setVisible(False) self.pushButton_add_oripaper.setVisible(False) if self.power[2] == '0': self.pushButton_print.setVisible(False) self.is_view = is_view self.autoid = autoid self.ori_detail = dict() self.new_detail = dict() self.ori_checkitem = [] self.new_checkitem = [] self.images_list = [] self.current_img = object self.current_page = object self.LC = LabrecordsController() self.SC = StuffController() self.PC = ProductController() # 自动缩放 self.label_image.setScaledContents(True) # 获取当前报告的信息 has_find_report = self.get_report_detail(self.autoid) # 获取检验项目 self.get_checkitem() if has_find_report: # 获取检验依据的下拉项目 self.get_combobox_items(self.comboBox_checkgist, 'checkgist', chkid=self.ori_detail['chkid']) # 获取结论的下拉项目 self.get_combobox_items(self.comboBox_result, 'result', chkid=self.ori_detail['chkid']) # 获取图片 self.get_images(autoid) # 获取原始检验记录 self.get_oricheckpaper(autoid) # 检验项目的右键菜单功能 if len(self.ori_detail): if self.ori_detail['paperno'] == '': self.get_paperno() self.new_paperstatus = self.ori_detail['paperstatus'] # 根据签名情况确定是否允许修改签名 self.set_paperstatus() def set_paperstatus(self): paperstatus = self.ori_detail['paperstatus'] if paperstatus == 1: # 检验人已经签名 self.pushButton_reporter.setEnabled(True) self.pushButton_checker.setEnabled(True) self.pushButton_warrantor.setEnabled(True) elif paperstatus == 2: # 复核人已经签名 self.pushButton_reporter.setEnabled(False) self.pushButton_checker.setEnabled(True) self.pushButton_warrantor.setEnabled(True) elif paperstatus == 3: # 审核人已经签名 self.pushButton_reporter.setEnabled(False) self.pushButton_checker.setEnabled(False) self.pushButton_warrantor.setEnabled(True) def get_report_detail(self, autoid): key_dict = {'autoid': autoid} res = self.LC.get_labrecord(False, *VALUES_TUPLE_LR, **key_dict) if len(res) == 1: self.ori_detail = res[0] self.label_chkitem.setText(self.ori_detail['chkid'] + self.ori_detail['chkname']) self.label_spec.setText(self.ori_detail['spec']) self.label_package.setText(self.ori_detail['package']) self.label_applydate.setText(str(self.ori_detail['sampledate'])) self.label_sampleamount.setText( str(self.ori_detail['sampleamount']) + self.ori_detail['sampleunit']) self.label_sampledate.setText(str(self.ori_detail['sampledate'])) self.label_samplesource.setText(self.ori_detail['samplesource']) self.label_checkamount.setText( str(self.ori_detail['checkamount']) + self.ori_detail['caunit']) self.label_batchno.setText(self.ori_detail['batchno']) self.label_supplyer.setText(self.ori_detail['supplyer']) self.label_producer.setText(self.ori_detail['producer']) self.label_mbatchno.setText(self.ori_detail['mbatchno']) self.lineEdit_paperno.setText(self.ori_detail['paperno']) self.dateEdit_reportdate.setDate( self.ori_detail['reportdate'] if type(self.ori_detail['reportdate']) is datetime.date else user. now_date) self.comboBox_checkgist.addItem(self.ori_detail['checkgist']) self.comboBox_checkgist.setCurrentText( self.ori_detail['checkgist']) self.pushButton_reporter.setText(self.ori_detail['reporterid'] + ' ' + self.ori_detail['reportername']) self.pushButton_checker.setText(self.ori_detail['checkerid'] + ' ' + self.ori_detail['checkername']) self.pushButton_warrantor.setText(self.ori_detail['warrantorid'] + ' ' + self.ori_detail['warrantorname']) self.comboBox_result.addItem(self.ori_detail['result']) self.comboBox_result.setCurrentText(self.ori_detail['result']) self.checkBox_conclusion.setCheckState( self.ori_detail['conclusion']) if self.ori_detail['status'] > 2: self.pushButton_save.setVisible(False) self.pushButton_accept.setVisible(False) if self.ori_detail['labtype'] not in (0, 1): self.label_mbatchno_text.setVisible(False) self.label_mbatchno.setVisible(False) self.label_supplyer_text.setVisible(False) self.label_supplyer.setVisible(False) self.label_producer_text.setVisible(False) self.label_producer.setVisible(False) self.label_sepc_text.setText("含量规格:") self.label_batchno_text.setText("批 号:") return True else: return False def get_checkitem(self): values_list = [ 'autoid', 'kind', 'itemname', 'labvalue', 'referencevalue', 'checked', 'startdate', 'enddate', 'checkerid', 'checkername', 'result' ] key_dict = {'lrid': self.autoid} res = self.LC.get_labitem(False, *values_list, **key_dict) self.ori_checkitem = res.order_by('kind', 'seqid') self.treeWidget_checkitem.clear() if not len(self.ori_checkitem): return for item in self.ori_checkitem: qtreeitem = QTreeWidgetItem(self.treeWidget_checkitem) qtreeitem.setText(0, str(item['autoid'])) qtreeitem.setText(1, item['kind']) qtreeitem.setText(2, item['itemname']) qtreeitem.setText( 3, str(item['startdate']) if type(item['startdate']) is datetime.date else '') qtreeitem.setText( 4, str(item['enddate']) if type(item['enddate']) is datetime.date else '') qtreeitem.setText(5, item['referencevalue']) qtreeitem.setText(6, item['labvalue']) qtreeitem.setText(7, CHECK_RESULT[item['result']]) qtreeitem.setText(8, item['checkerid'] + item['checkername']) qtreeitem.setCheckState(1, item['checked']) if item['result'] == 1: brush = QBrush(1) brush.setColor(QColor(255, 0, 0)) # for i in range(1, 9): qtreeitem.setBackground(7, brush) self.treeWidget_checkitem.hideColumn(0) for i in range(1, 8): self.treeWidget_checkitem.resizeColumnToContents(i) if self.treeWidget_checkitem.columnWidth(i) > 200: self.treeWidget_checkitem.setColumnWidth(i, 200) # 检验依据和结论获取下拉内容 def get_combobox_items(self, qcombobox: QComboBox, *args, **kwargs): if type(qcombobox) == QComboBox: text = qcombobox.currentText() res = self.LC.get_labrecord(True, *args, **kwargs) key = dict(zip(args, [ text, ])) items = res.exclude(**key) qcombobox.addItems(set(items)) def get_paperno(self): res = self.LC.get_paperno(self.autoid) self.lineEdit_paperno.setText(res[0]) def get_images(self, lrid): self.treeWidget_imagenamelist.clear() res = self.LC.get_labimages(False, scid=lrid) self.images_list = res for item in res: qtreeitem = QTreeWidgetItem(self.treeWidget_imagenamelist) qtreeitem.setText(0, str(item['autoid'])) qtreeitem.setText(1, str(item['imageid'])) qtreeitem.setText(2, item['title']) qtreeitem.setText(3, item['creatorid'] + item['creatorname']) qtreeitem.setText(4, str(item['createdate'])) def get_oricheckpaper(self, lrid): if self.is_view: return values_list = ['autoid', 'formname'] key_dict = {'lrid': lrid} res = self.LC.get_oricheckpaper(False, *values_list, **key_dict) for item in res: tabpage = QWidget() tabpage.setObjectName("oriid_" + str(item['autoid'])) self.tabWidget.addTab(tabpage, item['formname']) @pyqtSlot(QTreeWidgetItem, int) def on_treeWidget_checkitem_itemDoubleClicked(self, qtreeitem, p_int): if self.power[1] == '0' or self.ori_detail['status'] > 2: return item_id = int(qtreeitem.text(0)) detail = EditcheckitemModule(item_id, self) detail.accepted.connect(self.get_checkitem) detail.show() @pyqtSlot(QTreeWidgetItem, int) def on_treeWidget_checkitem_itemClicked(self, qtreeitem, p_int): if self.power[1] == '0' or self.ori_detail['status'] > 2: return if p_int == 1: newstate = qtreeitem.checkState(1) for item in self.ori_checkitem: if int(qtreeitem.text(0)) == item['autoid']: if newstate != item['checked']: it = { 'autoid': int(qtreeitem.text(0)), 'checked': newstate } self.new_checkitem.append(it) @pyqtSlot(QTreeWidgetItem, int) def on_treeWidget_imagenamelist_itemDoubleClicked(self, qtreeitem, p_int): rela_id = int(qtreeitem.text(0)) for item in self.images_list: if item['autoid'] == rela_id: if item['ext'].lower() == 'pdf': self.comboBox_jumpto.setVisible(True) self.pushButton_prepage.setVisible(True) self.pushButton_nextpage.setVisible(True) self.current_img = fitz.Document(stream=item['image'], filetype='pdf') page_count = self.current_img.pageCount page_list = [] self.comboBox_jumpto.clear() for i in range(1, page_count + 1): page_list.append('第' + str(i) + '页') self.comboBox_jumpto.addItems(page_list) self.current_page = self.current_img.loadPage(0) else: self.comboBox_jumpto.setVisible(False) self.pushButton_prepage.setVisible(False) self.pushButton_nextpage.setVisible(False) img = QImage.fromData(item['image']) self.current_img = QPixmap.fromImage(img) self.label_image.setPixmap(self.current_img) break # 默认放大为3被,同时自动调用on_horizontalSlider_zoom_valueChanged self.horizontalSlider_zoom.setValue(30) @pyqtSlot(int) def on_horizontalSlider_zoom_valueChanged(self, p_int): try: self.label_zoom.setText(str(p_int * 10) + '%') # 把当前页面转为QPixmap,并缩放为p_int/10 cover = render_pdf_page(self.current_page, p_int / 10, p_int / 10) self.label_image.setPixmap(cover) except (AttributeError, ValueError): size = self.current_img.size() new_pixmap = self.current_img.scaled(size.width() * p_int / 10, size.height() * p_int / 10) self.label_image.setPixmap(new_pixmap) @pyqtSlot(QPoint) def on_treeWidget_imagenamelist_customContextMenuRequested(self, pos): if self.power[1] == '0': return # 返回调用者的对象 sender_widget = self.sender() menu = QMenu() button1 = menu.addAction("新增图片") button2 = menu.addAction("修改图片") button3 = menu.addAction("删除图片") global_pos = sender_widget.mapToGlobal(pos) action = menu.exec(global_pos) res = "rollback" # 增加 if action == button1: img_names, img_type = QFileDialog.getOpenFileNames( self, "打开图片", os.path.expanduser("~") + "\Desktop", "*.jpg;;*.png;;*.bmp;;*.gif;;*.pdf;;All Files(*)") for item in img_names: imagename_no_ext = item.split("/")[-1] image_ext = item.split(".")[1] if image_ext.lower() not in ("jpg", "png", "bmp", "gif", "pdf"): continue fp = open(item, 'rb') with fp: image_byte = fp.read() fp.close() imagedetail = {'img': image_byte, 'ext': image_ext} reladetail = { 'kind': 2, 'scid': self.autoid, 'title': imagename_no_ext, 'creatorid': user.user_id, 'creatorname': user.user_name, 'createdate': user.now_date } res = self.LC.update_labimages(reladetail, imagedetail) # 修改 elif action == button2: rela_id = self.treeWidget_imagenamelist.currentItem().text(0) img_id = self.treeWidget_imagenamelist.currentItem().text(1) img_name, img_type = QFileDialog.getOpenFileName( self, "打开图片", os.path.expanduser("~") + "\Desktop", "*.jpg;;*.png;;*.bmp;;*.gif;;*.pdf;;All Files(*)") imagename_no_ext = img_name.split("/")[-1] image_ext = img_name.split(".")[1] if image_ext.lower() in ("jpg", "png", "bmp", "gif", "pdf"): fp = open(img_name, 'rb') with fp: image_byte = fp.read() fp.close() imagedetail = {'img': image_byte, 'ext': image_ext} reladetail = { 'title': imagename_no_ext, 'creatorid': user.user_id, 'creatorname': user.user_name, 'createdate': user.now_date } res = self.LC.update_labimages(reladetail, imagedetail, rela_id, img_id) # 删除 elif action == button3: select_item = sender_widget.selectedItems() rela_id = [] img_id = [] for item in select_item: rela_id.append(item.text(0)) img_id.append(item.text(1)) res = self.LC.delete_labimages(rela_id, img_id) if res == "accept": self.get_images(self.autoid) @pyqtSlot(int) def on_comboBox_jumpto_currentIndexChanged(self, p_int): try: self.current_page = self.current_img.loadPage(p_int) self.on_horizontalSlider_zoom_valueChanged( self.horizontalSlider_zoom.value()) except (AttributeError, ValueError): pass @pyqtSlot() def on_pushButton_prepage_clicked(self): index = self.comboBox_jumpto.currentIndex() if index - 1 >= 0: try: self.current_page = self.current_img.loadPage(index - 1) self.comboBox_jumpto.setCurrentIndex(index - 1) except (AttributeError, ValueError): pass @pyqtSlot() def on_pushButton_nextpage_clicked(self): index = self.comboBox_jumpto.currentIndex() if index + 1 < self.comboBox_jumpto.count(): try: self.current_page = self.current_img.loadPage(index + 1) self.comboBox_jumpto.setCurrentIndex(index + 1) except (AttributeError, ValueError): pass @pyqtSlot() def on_pushButton_add_oripaper_clicked(self): chkid = self.ori_detail['chkid'] itemtype = int(self.ori_detail['labtype']) if itemtype in (0, 1, 2): itemtype = 0 condition = {'stuffid': chkid} res = self.SC.get_data(0, True, *VALUES_TUPLE_ID, **condition) if not len(res): return dictid = res[0] elif itemtype in (3, 4, 5, 6): if itemtype > 4: itemtype = 4 condition = {'prodid': chkid} res = self.PC.get_data(1, True, *VALUES_TUPLE_ID, **condition) if not len(res): return dictid = res[0] else: dictid = chkid detail = SelectoricheckpaperModule(dictid, itemtype, self) detail.selected.connect(self.selectoricheckpaper) detail.show() @pyqtSlot(list) def selectoricheckpaper(self, p_list): if not len(p_list): return for item in p_list: sdf_detail = { 'lrid': self.autoid, 'creatorid': user.user_id, 'creatorname': user.user_name, 'createdate': user.now_date } op_detail = { 'batchno': self.ori_detail['batchno'], 'dictid': self.ori_detail['chkid'], 'dictname': self.ori_detail['chkname'] } res = self.LC.create_oricheckpaper(item[0], op_detail, item[1], sdf_detail) if not res: return tabpage = QWidget() tabpage.setObjectName("oriid_" + str(res.autoid)) self.tabWidget.addTab(tabpage, res.formname) @pyqtSlot(int) def on_tabWidget_currentChanged(self, p_int): if p_int <= 1: return # 点击的是原始检验记录 current_widget = self.tabWidget.currentWidget() if current_widget.children(): return objname = current_widget.objectName() try: ori_id = int(objname.split('_')[1]) except TypeError: # TypeError:objname的第二段不是数字 return is_finished = True if self.ori_detail['status'] > 2 else False self.current_content = OricheckpaperModule(ori_id, is_finished, self) self.current_content.deleted.connect(self.deleted_tab) gridlayout = QGridLayout(current_widget) gridlayout.addWidget(self.current_content) def deleted_tab(self): index = self.tabWidget.currentIndex() self.tabWidget.removeTab(index) @pyqtSlot(str) def on_lineEdit_paperno_textChanged(self, p_str): try: if p_str != self.ori_detail['paperno']: self.new_detail['paperno'] = p_str else: try: del self.new_detail['paperno'] except KeyError: pass except KeyError: self.new_detail['paperno'] = p_str @pyqtSlot(QDate) def on_dateEdit_reportdate_dateChanged(self, q_date): try: if type(self.ori_detail['reportdate']) is str: self.new_detail['reportdate'] = q_date.toPyDate() return if q_date != QDate(self.ori_detail['reportdate']): self.new_detail['reportdate'] = q_date.toPyDate() else: try: del self.new_detail['reportdate'] except KeyError: pass except KeyError: self.new_detail['reportdate'] = q_date.toPyDate() @pyqtSlot(str) def on_comboBox_checkgist_currentTextChanged(self, p_str): try: if p_str != self.ori_detail['checkgist']: self.new_detail['checkgist'] = p_str else: try: del self.new_detail['checkgist'] except KeyError: pass except KeyError: self.new_detail['checkgist'] = p_str @pyqtSlot(str) def on_comboBox_result_currentTextChanged(self, p_str): try: if p_str != self.ori_detail['result']: self.new_detail['result'] = p_str else: try: del self.new_detail['result'] except KeyError: pass except KeyError: self.new_detail['result'] = p_str @pyqtSlot(int) def on_checkBox_conclusion_stateChanged(self, p_int): try: if p_int != self.ori_detail['conclusion']: self.new_detail['conclusion'] = p_int else: try: del self.new_detail['conclusion'] except KeyError: pass except KeyError: self.new_detail['conclusion'] = p_int @pyqtSlot(bool, str) def on_pushButton_reporter_signChanged(self, p_bool, p_str): id, name = p_str.split(' ') if p_bool else ('', '') try: if id != self.ori_detail['reporterid'] or name != self.ori_detail[ 'opertername']: self.new_detail['reporterid'] = id self.new_detail['reportername'] = name if id != '': self.new_paperstatus = 1 else: self.new_paperstatus = 0 else: try: del self.new_detail['reporterid'] del self.new_detail['reportername'] except KeyError: pass except KeyError: self.new_detail['reporterid'] = id self.new_detail['reportername'] = name @pyqtSlot(bool, str) def on_pushButton_checker_signChanged(self, p_bool, p_str): id, name = p_str.split(' ') if p_bool else ('', '') try: if id != self.ori_detail['checkerid'] or name != self.ori_detail[ 'checkername']: self.new_detail['checkerid'] = id self.new_detail['checkername'] = name if id != '': self.new_paperstatus = 2 else: self.new_paperstatus = 1 else: try: del self.new_detail['checkerid'] del self.new_detail['checkername'] except KeyError: pass except KeyError: self.new_detail['checkerid'] = id self.new_detail['checkername'] = name @pyqtSlot(bool, str) def on_pushButton_warrantor_signChanged(self, p_bool, p_str): id, name = p_str.split(' ') if p_bool else ('', '') try: if id != self.ori_detail['warrantorid'] or name != self.ori_detail[ 'warrantorname']: self.new_detail['warrantorid'] = id self.new_detail['warrantorname'] = name if id != '': self.new_paperstatus = 3 else: self.new_paperstatus = 2 else: try: del self.new_detail['warrantorid'] del self.new_detail['warrantorname'] except KeyError: pass except KeyError: self.new_detail['warrantorid'] = id self.new_detail['warrantorname'] = name @pyqtSlot() def on_pushButton_save_clicked(self): if self.new_paperstatus != self.ori_detail['paperstatus']: self.new_detail['paperstatus'] = self.new_paperstatus if len(self.new_detail): res = self.LC.update_labrecord(self.autoid, **self.new_detail) if res: self.new_detail = {} if len(self.new_checkitem): for item in self.new_checkitem: res = self.LC.update_labitem(**item) if res: self.new_checkitem = {} self.accepted.emit() # self.close() @pyqtSlot() def on_pushButton_accept_clicked(self): if self.new_paperstatus != self.ori_detail['paperstatus']: self.new_detail['paperstatus'] = self.new_paperstatus if self.checkBox_conclusion.checkState() == 0: self.new_detail['status'] = 4 else: self.new_detail['status'] = 3 res = self.LC.update_labrecord(self.autoid, **self.new_detail) if res: self.new_detail = {} if len(self.new_checkitem): for item in self.new_checkitem: res = self.LC.update_labitem(**item) if res: self.new_checkitem = {} self.accepted.emit() self.close() def closeEvent(self, qcloseevent): if self.power[1] == '0' or self.ori_detail['status'] > 2: return if len(self.new_detail): qdialog = MessageBox(self, title="提醒", text="检验报告书", informative="是否保存修改?") res = qdialog.exec() if res == 16384: self.on_pushButton_save_clicked() for i in range(2, self.tabWidget.count() + 1): widgets = self.tabWidget.widget(i) try: for item in widgets.children(): try: if item.current_content.flat == 1: qdialog = MessageBox( self, title="提醒", text=self.tabWidget.tabText(i), informative="是否保存修改?") res = qdialog.exec() if res == 16384: item.on_pushButton_accept_clicked() except AttributeError: pass except AttributeError: pass