class MidproddetailModule(QWidget, Ui_Form): """ 半成品登记/发放列表记录记录 分3个标签,0:未登记,1:已登记,2:已发放 点击其中一条生产记录时下方显示对应的记录内容 在未登记标签里右键可以选择增加新的登记信息,以及工人签名 在已登记标签里右键可以选中发放签名以及工人签名 """ def __init__(self, parent=None): super(MidproddetailModule, self).__init__(parent) self.setupUi(self) self.ppid = 0 self.sign_id = '' self.sign_name = '' self.PC = ProductController() self.ori_detail = dict() self.new_detail = dict() self.groupBox.setVisible(False) # 获取当前状态的批生产记录 self.get_prodstatusinmid() def get_prodstatusinmid(self): self.treeWidget_prodlist.clear() values_tuple = ( "autoid", "prodid", "prodname", "commonname", "spec", "package", "planamount", "spunit", 'batchno' ) index = self.tabWidget.currentIndex() key_dict = { 'midstatus': index } res = self.PC.get_producingplan(False, *values_tuple, **key_dict) for item in res: qtreeitem = QTreeWidgetItem(self.treeWidget_prodlist) qtreeitem.setText(0, str(item['autoid'])) qtreeitem.setText(1, item['prodid'] + ' ' + item['prodname']) qtreeitem.setText(2, item['commonname']) qtreeitem.setText(3, item['batchno']) qtreeitem.setText(4, item['spec']) qtreeitem.setText(5, item['package']) qtreeitem.setText(6, str(item['planamount']) + item['spunit']) self.treeWidget_prodlist.hideColumn(0) for i in range(1, 7): self.treeWidget_prodlist.resizeColumnToContents(i) # 获取半成品信息 def get_midprod(self): self.treeWidget_midprodlist.clear() values_list = [ "autoid", "container", "amount", "unit", "registrarid", "registrarname", "regtime", "workerid", "workername", "providerid", "providername", "drawtime", "drawerid", "drawername"] key_dict = { 'ppid': self.ppid } res = self.PC.get_midproddrawnotes(True, *values_list, **key_dict) if len(res): for item in res.order_by('container'): qtreeitem = QTreeWidgetItem(self.treeWidget_midprodlist) qtreeitem.setText(0, str(item[0])) # autoid qtreeitem.setText(1, str(item[1])) # 桶号 qtreeitem.setText(2, str(item[2]) + item[3]) # 数量 qtreeitem.setText(3, item[4] + ' ' + item[5]) # 登记人 qtreeitem.setText(4, str(item[6])) # 登记日期 qtreeitem.setText(5, item[7] + ' ' + item[8]) # 登记工人 qtreeitem.setText(6, item[9] + ' ' + item[10]) # 发放人 qtreeitem.setText(7, str(item[11]) if type( item[11]) is datetime.datetime else '') # 发放日期 qtreeitem.setText(8, item[12] + ' ' + item[13]) # 领取工人 self.treeWidget_midprodlist.hideColumn(0) for i in range(1, 6): self.treeWidget_midprodlist.resizeColumnToContents(i) # @pyqtSlot() # def on_pushButton_workersign_clicked(self): # it = QTreeWidgetItemIterator(self.treeWidget_midproductlist) # # id_list = [] # while it.value(): # item = it.value() # id_list.append(int(item.text(0))) # it += 1 # if not len(id_list): # return # detail = dict() # status : int # if self.kind == 0: # detail = { # 'workerid': user.user_id, # 'workername': user.user_name # } # status = 1 # elif self.kind == 1: # detail = { # 'drawerid': user.user_id, # 'drawername': user.user_name # } # status = 2 # # res = self.PC.update_midproddrawnotes(id_list, self.autoid, status, **detail) # if res > 0: # self.get_midprod() @pyqtSlot(int) def on_tabWidget_currentChanged(self, p_int): getattr(self, 'tab_' + str(p_int)).setLayout(self.gridLayout_2) self.get_prodstatusinmid() self.groupBox.setVisible(False) @pyqtSlot(QTreeWidgetItem, int) def on_treeWidget_prodlist_itemClicked(self, qtreeitem, p_int): if not self.groupBox.isVisible(): self.groupBox.setVisible(True) self.ppid = int(qtreeitem.text(0)) self.get_midprod() @pyqtSlot(QPoint) def on_treeWidget_midprodlist_customContextMenuRequested(self, pos): # 返回调用者的对象 sender_widget = self.sender() menu = QMenu() index = self.tabWidget.currentIndex() if index == 0: button1 = menu.addAction("增加") button2 = menu.addAction("修改") button3 = menu.addAction("删除") button4 = menu.addAction("登记工人签名") elif index == 1: button5 = menu.addAction("发放人签名") button6 = menu.addAction("领取工人签名") else: return global_pos = sender_widget.mapToGlobal(pos) action = menu.exec(global_pos) if index == 0: if action == button1: ppid = int(self.treeWidget_prodlist.currentItem().text(0)) detail = Modifymiddetailmodule(ppid=ppid, parent=self) detail.itemAdded.connect(self.get_midprod) detail.show() elif action == button2: qtreeitem = sender_widget.currentItem() if not qtreeitem: return detail = Modifymiddetailmodule(autoid=int(qtreeitem.text(0)), parent=self) detail.accepted.connect(self.get_midprod) detail.show() elif action == button3: items = sender_widget.selectedItems() if not items: return id_list = [] for item in items: id_list.append(int(item.text(0))) res = self.PC.delete_midproddrawnotes(id_list) if res: self.get_midprod() elif action == button4: signmodule = SignModule() signmodule.userchanged.connect(self.set_signuser) signmodule.exec() id_list = [] it = QTreeWidgetItemIterator(self.treeWidget_midprodlist) while it.value(): qtreeitem = it.value() id_list.append(int(qtreeitem.text(0))) it += 1 detail = { 'workerid': self.sign_id, 'workername': self.sign_name } if not len(id_list): return res = self.PC.update_midproddrawnotes( autoid=id_list, pid=self.ppid, **detail, status=1 ) if res: self.get_midprod() self.get_prodstatusinmid() elif index == 1: if action == button5: signmodule = SignModule() signmodule.userchanged.connect(self.set_signuser) signmodule.exec() id_list = [] it = QTreeWidgetItemIterator(self.treeWidget_midprodlist) while it.value(): qtreeitem = it.value() id_list.append(int(qtreeitem.text(0))) it += 1 detail = { 'providerid': self.sign_id, 'providername': self.sign_name, 'drawtime': user.time } if not len(id_list): return res = self.PC.update_midproddrawnotes(autoid=id_list, **detail) if res: self.get_midprod() self.get_prodstatusinmid() elif action == button6: signmodule = SignModule() signmodule.userchanged.connect(self.set_signuser) signmodule.exec() id_list = [] it = QTreeWidgetItemIterator(self.treeWidget_midprodlist) while it.value(): qtreeitem = it.value() if qtreeitem.text(6) not in ('', ' '): id_list.append(int(qtreeitem.text(0))) it += 1 detail = { 'drawerid': self.sign_id, 'drawername': self.sign_name } if not len(id_list): return if len( id_list) < self.treeWidget_midprodlist.topLevelItemCount() \ or self.sign_id in ('', ' '): status = 1 else: status = 2 res = self.PC.update_midproddrawnotes( autoid=id_list, pid=self.ppid, **detail, status=status ) if res: self.get_midprod() self.get_prodstatusinmid() # except (AttributeError, UnboundLocalError): # pass def set_signuser(self, p_bool, p_str): if p_str in ('', ' '): self.sign_id = '' self.sign_name = '' else: try: self.sign_id, self.sign_name = p_str.split(' ') except ValueError: self.sign_id = '' self.sign_name = '' @pyqtSlot(QTreeWidgetItem, int) def on_treeWidget_midprodlist_itemDoubleClicked(self, qtreeitem, p_int): if not qtreeitem: return detail = Modifymiddetailmodule( autoid=int(qtreeitem.text(0)), parent=self ) detail.accepted.connect(self.get_midprod) detail.show()
class MidproddrawnoteModule(QWidget, Ui_Form): """ 半成品登记/发放记录 autoid: 登记/发放表的ppid kind: 0为登记记录,1为发放记录 """ def __init__(self, autoid, kind, parent=None): super(MidproddrawnoteModule, self).__init__(parent) self.autoid = autoid self.kind = kind self.setupUi(self) self.PC = ProductController() self.ori_detail = dict() self.new_detail = dict() if kind == 0: self.treeWidget_midproductlist.headerItem().setText(3, "中间站登记人") self.treeWidget_midproductlist.headerItem().setText(5, "登记工人") elif kind == 1: self.treeWidget_midproductlist.headerItem().setText(3, "中间站发放人") self.treeWidget_midproductlist.headerItem().setText(5, "领料工人") # 获取半成品信息 self.get_midprod() # 获取半成品的登记/发放状态 self.get_midstatus() def get_midprod(self): self.treeWidget_midproductlist.clear() values_list = ["autoid", "container", "amount", "unit"] if self.kind == 0: reg_list = [ "registrarid", "registrarname", "regtime", "workerid", "workername" ] elif self.kind == 1: reg_list = [ "providerid", "providername", "drawtime", "drawerid", "drawername" ] values_list += reg_list key_dict = {'ppid': self.autoid} res = self.PC.get_midproddrawnotes(True, *values_list, **key_dict) if len(res): for item in res: qtreeitem = QTreeWidgetItem(self.treeWidget_midproductlist) qtreeitem.setText(0, str(item[0])) # autoid qtreeitem.setText(1, str(item[1])) # 桶号 qtreeitem.setText(2, str(item[2]) + item[3]) # 数量 qtreeitem.setText(3, item[4] + ' ' + item[5]) # 登记人/发放人 qtreeitem.setText(4, str(item[6])) # 登记/发放日期 qtreeitem.setText(5, item[7] + ' ' + item[8]) # 工人 self.treeWidget_midproductlist.hideColumn(0) for i in range(1, 6): self.treeWidget_midproductlist.resizeColumnToContents(i) def get_midstatus(self): values_tuple = ("midstatus", ) key_dict = {'autoid': self.autoid} res = self.PC.get_producingplan(False, *values_tuple, **key_dict) if len(res) == 1: if res[0]['midstatus'] > 2 and self.kind == 0: # 已经完成发放记录,则无法修改登记记录 self.pushButton_workersign.setVisible(False) elif res[0]['midstatus'] == 0 and self.kind == 1: # 还没有完成登记,则无法修改发放记录 self.pushButton_workersign.setVisible(False) @pyqtSlot() def on_pushButton_workersign_clicked(self): it = QTreeWidgetItemIterator(self.treeWidget_midproductlist) id_list = [] while it.value(): item = it.value() id_list.append(int(item.text(0))) it += 1 if not len(id_list): return detail = dict() status: int if self.kind == 0: detail = {'workerid': user.user_id, 'workername': user.user_name} status = 1 elif self.kind == 1: detail = {'drawerid': user.user_id, 'drawername': user.user_name} status = 2 res = self.PC.update_midproddrawnotes(id_list, self.autoid, status, **detail) if res > 0: self.get_midprod()
class Modifymiddetailmodule(QDialog, Ui_Dialog): itemAdded = pyqtSignal() def __init__(self, autoid: int=0, ppid: int=0, parent=None): super(Modifymiddetailmodule, self).__init__(parent) self.autoid = autoid self.ppid = ppid self.setupUi(self) self.PC = ProductController() self.ori_detail = dict() self.new_detail = dict() # 获取当前半成品登记的详情 self.get_detail() # 设置桶号的校验器 self.set_container_validator() # 设置数量的校验器 self.set_amount_validator() def get_detail(self): if not self.autoid: self.lineEdit_container.setText("1") self.dateTimeEdit_regtime.setDateTime(user.time) return values_list = [ "container", "amount", "unit", "regtime" ] key_dict = { 'autoid': self.autoid } res = self.PC.get_midproddrawnotes(False, *values_list, **key_dict) if len(res) == 1: self.ori_detail = res[0] self.lineEdit_container.setText(str(self.ori_detail['container'])) self.lineEdit_amount.setText(str(self.ori_detail['amount'])) self.lineEdit_unit.setText(self.ori_detail['unit']) self.dateTimeEdit_regtime.setDateTime( self.ori_detail['regtime'] if type(self.ori_detail['regtime']) \ is datetime.datetime else user.time ) def set_container_validator(self): intvalidator = QIntValidator() intvalidator.setBottom(1) self.lineEdit_amount.setValidator(intvalidator) def set_amount_validator(self): doublevalidator = QDoubleValidator() doublevalidator.setBottom(0) self.lineEdit_amount.setValidator(doublevalidator) @pyqtSlot(str) def on_lineEdit_container_textChanged(self, p_str): try: if p_str != self.ori_detail['container']: self.new_detail['container'] = p_str else: try: del self.new_detail['container'] except KeyError: pass except KeyError: self.new_detail['container'] = p_str @pyqtSlot(str) def on_lineEdit_amount_textChanged(self, p_str): try: if p_str != self.ori_detail['amount']: self.new_detail['amount'] = p_str else: try: del self.new_detail['amount'] except KeyError: pass except KeyError: self.new_detail['amount'] = p_str @pyqtSlot(str) def on_lineEdit_unit_textChanged(self, p_str): try: if p_str != self.ori_detail['unit']: self.new_detail['unit'] = p_str else: try: del self.new_detail['unit'] except KeyError: pass except KeyError: self.new_detail['unit'] = p_str @pyqtSlot(QDateTime) def on_dateTimeEdit_regtime_dateTimeChanged(self, q_datetime): try: if type(self.ori_detail['regtime']) is str: self.new_detail['regtime'] = q_datetime.toPyDateTime() return if q_datetime != QDateTime(self.ori_detail['regtime']): self.new_detail['regtime'] = q_datetime.toPyDateTime() else: try: del self.new_detail['regtime'] except KeyError: pass except KeyError: self.new_detail['regtime'] = q_datetime.toPyDateTime() @pyqtSlot() def on_pushButton_accept_clicked(self): if self.lineEdit_amount.text() == '': return if not len(self.new_detail): return self.new_detail['registrarid'] = user.user_id self.new_detail['registrarname'] = user.user_name if self.autoid: res = self.PC.update_midproddrawnotes( autoid=self.autoid, **self.new_detail ) if res: self.accept() else: self.new_detail['ppid'] = self.ppid res = self.PC.update_midproddrawnotes(**self.new_detail) if res: self.itemAdded.emit() container = int(self.lineEdit_container.text()) self.lineEdit_container.setText(str(container + 1)) @pyqtSlot() def on_pushButton_cancel_clicked(self): self.close()