def preview(self): if self.pre_check.isChecked(): s = QMessageBox.question( self, '提交处理单', '<自审人:{}>, <提交时间:{}>'.format( user_info.get_value('USERNAME'), datetime.now().strftime('%Y-%m-%d %H:%M'))) if s == QMessageBox.Yes: contents = [ ctl.toPlainText().replace(' ', '') for ctl in (self.result, self.correctiveaciton, self.precaution) ] contents.append(self.parts.text()) if all(contents): self.save() # update db else: QMessageBox.warning(self, '处理信息不全', '完成原因分析,纠正措施,预防措施及需参与的评审部门后提交!') self.pre_check.setChecked(False) else: self.pre_check.setChecked(False) else: s = QMessageBox.question( self, '撤销提交', '<自审人:{}>, <提交时间:{}>'.format( user_info.get_value('USERNAME'), datetime.now().strftime('%Y-%m-%d %H:%M'))) if s == QMessageBox.Yes: self.save() # update db else: self.pre_check.setChecked(True)
def save_pre_info(self): try: row = self.pre_tbl_view.currentIndex().row() unpass_id = int(self.model_pre.item(row, 0).text()) part = user_info.get_value('PART') pre_information = self.txt_pre_info.toPlainText() if pre_information.replace(' ', ''): _db = MysqlDb() sql_pre_chk = "UPDATE 不合格品登记 SET {}评审=True WHERE ID={}" \ "".format(part, unpass_id) sql_pre_info = "UPDATE 状态标记 SET {}评审信息='{}' WHERE ID={}" \ "".format(part, pre_information, unpass_id) with _db: try: _db._cursor.execute(sql_pre_chk) _db._cursor.execute(sql_pre_info) eval('self.{}.setText(pre_information)' ''.format( dict( zip(FIELDS_IN_TAB2.values(), FIELDS_IN_TAB2.keys()))[part + '评审信息'])) _db._cnn.commit() QMessageBox.information(self, 'Information', '已保存!') self._load_tbl_pre_data() except Exception as e: _db._cnn.rollback() user_info.log2txt( '提交写入评审信息时出现错误<save_pre_info>:<{}>'.format(e)) QMessageBox.critical(self, 'Mistake', '系统错误未保存!') except Exception as e: user_info.log2txt('试图保存评审信息时出现错误<save_pre_info>:<{}>'.format(e)) pass
def _load_tbl_pre_data(self): current_part = user_info.get_value('PART') other_fields = ','.join(FIELDS_PRE[2:-2]) # fields will be ['ID', '本部评审', '批号', '不良品名称', '客户', '生产日期', '数量Kg', '不良品种类', 'Review Finish', 'To_General'] if current_part != '总经办' and current_part != '质量部': pre_info_sql = "SELECT a.ID,IF({2}评审=TRUE,'完成','未完成'),{0},IF(review_finish=TRUE,'YES','NO'),IF(g_m_rev=TRUE,'YES','NO') " \ "FROM 不合格品登记 a INNER JOIN 状态标记 b ON a.ID=b.ID " \ "WHERE b_m_rev=TRUE " \ "AND case_closed_flag=False " \ "AND FIND_IN_SET('{1}',part_need_review)" \ "".format(other_fields, current_part, current_part) self.set_tbl_pre(FIELDS_PRE, pre_info_sql) elif current_part == '质量部': pre_info_sql = "SELECT a.ID,IF({2}评审=TRUE,'完成','未完成'),{0},IF(review_finish=TRUE,'YES','NO'),IF(g_m_rev=TRUE,'YES','NO') " \ "FROM 不合格品登记 a INNER JOIN 状态标记 b ON a.ID=b.ID " \ "WHERE b_m_rev=TRUE " \ "AND case_closed_flag=False " \ "".format(other_fields, current_part, current_part) self.set_tbl_pre(FIELDS_PRE, pre_info_sql) elif current_part == '总经办': general_fields = [ 'ID', '本部评审', '批号', '不良品名称', '客户', '生产日期', '数量Kg', '不良品种类' ] pre_info_sql = "SELECT a.ID,IF({2}评审=TRUE,'YES','NO'),{0} " \ "FROM 不合格品登记 a INNER JOIN 状态标记 b ON a.ID=b.ID " \ "WHERE g_m_rev=TRUE " \ "AND case_closed_flag=False " \ "".format(other_fields, current_part, current_part) self.set_tbl_pre(general_fields, pre_info_sql)
def processtrigger_tbl_unpass(self, act): row = self.tbl_unpass.currentIndex().row() if row != -1: unpass_id = int(self.model_unpass.item(row, 0).text()) to_parts = user_info.get_value('PARTS')[:-1] sql = '' try: _db = MysqlDb() with _db: if act.text() in to_parts: sql = "UPDATE 状态标记 SET caseto_by_QA='{}' WHERE ID={}".format( act.text(), unpass_id) elif act.text() == 'Delete': sql = 'DELETE FROM 不合格品登记 WHERE ID = %d' % unpass_id try: _db.modify_db("DELETE FROM 状态标记 WHERE ID = %d" % unpass_id) except Exception as e: user_info.log2txt(e) elif act.text() == 'Start Department Review': sql = "UPDATE 状态标记 SET b_m_rev=True WHERE ID={}".format( unpass_id) elif act.text() == '刷新': self.set_tbl_unpass(TBL_UNPASS_SQL) elif act.text() == '输入处理意见': idea_dia = IdeaDialog(self, user_info.get_value('USERNAME'), user_info.get_value('PART'), unpass_id) idea_dia.show() _db.modify_db(sql) self.fuzzy_search() except Exception as e: user_info.log2txt( '右键操作不合格清单列表<ID={}>时出现错误<processtrigger_tbl_unpass>:<{}>'. format(unpass_id, e)) pass
def rclick_tbl_pre(self): popMenu = QMenu() action_to_gm = QAction('Start General Review') action_to_gm.setIcon(QIcon('icons/general_manager_128px.ico')) action_review_finish = QAction('Flag Review Finish') action_review_finish.setIcon(QIcon('icons/confirm128px.ico')) popMenu.addAction(action_to_gm) popMenu.addAction(action_review_finish) if user_info.get_value('PART') != '质量部': action_to_gm.setEnabled(False) action_review_finish.setEnabled(False) popMenu.triggered.connect(self.processtrigger_tbl_pre) popMenu.exec_(QCursor.pos())
def rclick_tbl_unpass(self): popMenu = QMenu() submenu_caseto = QMenu('CaseTo') submenu_caseto.setIcon(QIcon('icons/user.ico')) for part in user_info.get_value('PARTS')[:-1]: submenu_caseto.addAction(QAction(part, self)) action_del = QAction('Delete', self) action_del.setIcon(QIcon('icons/delete_file_32px.ico')) action_part_preview = QAction('Start Department Review', self) action_part_preview.setIcon(QIcon('icons/parameterreview_32px.ico')) action_flush = QAction('刷新', self) action_flush.setIcon(QIcon('icons/dir.png')) action_typeidea = QAction('输入处理意见', self) action_typeidea.setIcon(QIcon('icons/input_tablet_32px.ico')) if user_info.get_value('PART') != '质量部': for ctl in [action_del, action_part_preview, submenu_caseto]: ctl.setEnabled(False) popMenu.addMenu(submenu_caseto) popMenu.addAction(action_del) popMenu.addAction(action_part_preview) popMenu.addAction(action_flush) popMenu.addAction(action_typeidea) popMenu.triggered.connect(self.processtrigger_tbl_unpass) popMenu.exec_(QCursor.pos())
def tab_changed(self, index): self.txt_pre_info.setPlainText('') self.show_review_doc.clear() if index == 0: if user_info.get_value('PART') == '质量部': self.save_unpass.setVisible(True) self.show_test_win.setVisible(True) else: self.save_unpass.setVisible(False) self.show_test_win.setVisible(False) elif index == 1: # set privileges if not user_info.get_value('PRIVILEGE'): self.btn_save_pre.setEnabled(False) try: self._load_tbl_pre_data() except Exception as e: user_info.log2txt(e) self.txt_pre_info.setEnabled(False) self.btn_save_pre.clicked.connect(self.save_pre_info) elif index == 2: self._load_on_follow_view_data() self.on_follow_view.clicked.connect(self.show_deal_method) self.follow_btn_search.clicked.connect(self.search_follow_item)
def save_new_pwd(self): pwd = self.line_pwd_one.text() pwd_again = self.line_pwd_again.text() if pwd == pwd_again and pwd: user_name = user_info.get_value('USERNAME') print(user_name) sql = 'UPDATE 用户 SET 密码="{}" WHERE 用户名="{}"'.format(pwd, user_name) try: db = MysqlDb() with db: db.modify_db(sql) QMessageBox.information(self, '完成提示', '密码修改成功!') except Exception as e: user_info.log2txt('更改用户密码时错误:<{}>'.format(e)) else: QMessageBox.warning(self, '错误提示', '输入有误!') self.show() # keep use this dialog when need not quit
def save(self): if self.ID.text(): username = user_info.get_value('USERNAME') save_time = datetime.now().strftime('%Y-%m-%d %H:%M') _db = MysqlDb() with _db: sql = "UPDATE 不合格品登记 " \ "SET 原因分析='{0}',纠正措施='{1}',预防措施='{2}',自审人='{3}',自审时间='{4}',责任自审={5} " \ "WHERE ID={6}".format(self.result.toPlainText(), self.correctiveaciton.toPlainText(), self.precaution.toPlainText(), username, save_time, self.pre_check.isChecked(), int(self.ID.text())) _db.modify_db(sql) QMessageBox.information(self, 'Information', '已保存') self.person.setText(username) self.pre_time.setText(save_time)
def rclick_follow_view(self): popMenu = QMenu() action_close_case = QAction('Close Case') action_close_case.setIcon(QIcon('icons/delete_file_32px.ico')) action_add_method = QAction('添加处置') action_add_method.setIcon(QIcon('icons/dealidea.ico')) action_flush = QAction('刷新') action_flush.setIcon(QIcon('icons/dir.png')) popMenu.addAction(action_close_case) popMenu.addAction(action_add_method) popMenu.addAction(action_flush) if user_info.get_value('PART') != '质量部': action_close_case.setEnabled(False) popMenu.triggered.connect(self.processtrigger_follow_view) popMenu.exec_(QCursor.pos())
def show_unpass_item(self): row = self.tbl_unpass.currentIndex().row() unpass_id = int(self.model_unpass.item( row, 0).text()) # pos(row, 0) the first column try: _db = MysqlDb() with _db: fd = ','.join(list(FIELDS_IN_TAB1.values())[1:]) sql = "SELECT a.ID,{0} FROM" \ " 不合格品登记 a LEFT JOIN 状态标记 b " \ "ON a.ID=b.ID " \ "WHERE a.ID={1}".format(fd, unpass_id) _rst = _db.get_rst(sql) values = list(_rst[0].values()) fd = list(FIELDS_IN_TAB1.keys()) for i in range(len(fd)): try: v = values[i] if values[i] is not None else '' exec_str = 'self.{}.setText(str(v))'.format(fd[i]) if fd[i] == 'pre_check': exec_str = 'self.{}.setChecked(v)'.format(fd[i]) elif fd[i] == 'prodate': exec_str = 'self.{}.setText(v.strftime("%Y-%m-%d"))'.format( fd[i]) eval(exec_str) except Exception as e: user_info.log2txt( '单击显示不合格项目<ID={}>时出现错误<show_unpass_item>:<{}>'.format( unpass_id, e)) pass except Exception as e: user_info.log2txt(e) if self.person.text() != '' and self.person.text( ) != user_info.get_value('USERNAME'): self.btn_save.setEnabled(False) self.pre_check.setEnabled(False) self.btn_slparts.setEnabled(False) else: self.btn_save.setEnabled(True) self.pre_check.setEnabled(True) self.btn_slparts.setEnabled(True)
def save_method(self): deal_id = self.line_deal_id.text() id = self.line_unpass_id.text() method = self.txt_deal_method.toPlainText() deal_qty = self.line_deal_qty.text() deal_qty = float(deal_qty) if deal_qty else 0 deal_date = self.date_deal.text() person = user_info.get_value('USERNAME') wr_time = datetime.now().__format__("%Y-%m-%d %H:%M") if deal_date and deal_qty and method: sql = "INSERT INTO fcase_deallog VALUES('{}',{},'{}','{}','{}','{}','{}')" \ "".format(deal_id, id, method, deal_qty, deal_date, person, wr_time) db = MysqlDb() with db: try: db.modify_db(sql) self.parent.show_deal_method() self.close() except Exception as e: user_info.log2txt('添加新的处理(id=<{}>)记录时<error>: {}'.format( id, e))
def _pre_sign(self): old_cont = self.txt_pre_info.toPlainText() sign_info = "\t>>>{}\n\t>>>{}" \ "".format(user_info.get_value('USERNAME'), datetime.now().strftime("%Y-%m-%d %H:%M")) self.txt_pre_info.setPlainText(old_cont + '\n' + sign_info)