class RectifyReportModule(QDialog, Ui_Dialog):
    saved = pyqtSignal()

    def __init__(self, autoid=None, scrid=0, parent=None):
        super(RectifyReportModule, self).__init__(parent)
        self.setupUi(self)
        self.autoid = autoid
        self.scrid = scrid
        self.ori_detail = {}
        self.new_detail_notice = {}
        self.new_detail_report = {}
        self.SC = SelfCheckController()
        return_row = ('autoid', 'deptid', 'deptname')
        condition_key = {'deptid', 'deptname', 'inputcode'}
        treeheader_name = ["id", "部门编号", "部门名称"]
        self.lineEdit_dept.setup('Department', return_row, condition_key,
                                 treeheader_name, None, 550, 300)
        self.get_detail()

    def get_detail(self):
        if self.autoid is None:
            self.tab_2.setVisible(False)
            return
        condition = {'autoid': self.autoid}
        res = self.SC.get_data(5, False, *VALUES_TUPLE_RECTIFY, **condition)
        if not len(res):
            self.pushButton_accept.setVisible(False)
            self.pushButton_apply.setVisible(False)
            self.tab_2.setVisible(False)
            return
        self.ori_detail = res[0]
        if self.ori_detail['deptid'] != '' or self.ori_detail['deptname'] != '':
            self.lineEdit_dept.setText(self.ori_detail['deptid'] + ' ' +
                                       self.ori_detail['deptname'])
        self.lineEdit_accordance.setText(self.ori_detail['accordance'])
        self.plainTextEdit_descrip.setPlainText(self.ori_detail['descrip'])
        self.pushButton_qa.setText(self.ori_detail['qaid'] + ' ' +
                                   self.ori_detail['qaname'])
        self.plainTextEdit_measure.setPlainText(self.ori_detail['measure'])
        self.pushButton_dcharger.setText(self.ori_detail['dchargerid'] + ' ' +
                                         self.ori_detail['dchargername'])
        self.pushButton_group.setText(self.ori_detail['groupid'] + ' ' +
                                      self.ori_detail['groupname'])
        self.plainTextEdit_done.setPlainText(self.ori_detail['done'])
        self.plainTextEdit_checkdone.setPlainText(self.ori_detail['checkdone'])
        self.pushButton_dncharger.setText(self.ori_detail['dnchargerid'] +
                                          ' ' +
                                          self.ori_detail['dnchargername'])
        self.pushButton_cd.setText(self.ori_detail['cdid'] + ' ' +
                                   self.ori_detail['cdname'])
        self.pushButton_leader.setText(self.ori_detail['leaderid'] + ' ' +
                                       self.ori_detail['leadername'])
        self.pushButton_gp.setText(self.ori_detail['gpid'] + ' ' +
                                   self.ori_detail['gpname'])

    @pyqtSlot(object)
    def on_lineEdit_dept_getItem(self, qtreeitem):
        if qtreeitem is None:
            return
        deptid, deptname = qtreeitem.text(1), qtreeitem.text(2)
        try:
            if deptid != self.ori_detail['deptid']:
                self.new_detail_report['deptid'] = deptid
                self.new_detail_report['deptname'] = deptname
            else:
                try:
                    del self.new_detail_report['deptid']
                    del self.new_detail_report['deptname']
                except KeyError:
                    pass
        except KeyError:
            self.new_detail_report['deptid'] = deptid
            self.new_detail_report['deptname'] = deptname

    @pyqtSlot(str)
    def on_lineEdit_accordance_textChanged(self, p_str):
        try:
            if p_str != self.ori_detail['accordance']:
                self.new_detail_report['accordance'] = p_str
            else:
                try:
                    del self.new_detail_report['accordance']
                except KeyError:
                    pass
        except KeyError:
            self.new_detail_report['accordance'] = p_str

    @pyqtSlot()
    def on_plainTextEdit_descrip_textChanged(self):
        p_str = self.plainTextEdit_descrip.toPlainText()
        try:
            if p_str != self.ori_detail['descrip']:
                self.new_detail_report['descrip'] = p_str
            else:
                try:
                    del self.new_detail_report['descrip']
                except KeyError:
                    pass
        except KeyError:
            self.new_detail_report['descrip'] = p_str

    @pyqtSlot(bool, str)
    def on_pushButton_qa_signChanged(self, p_bool, p_str):
        id, name = p_str.split(' ') if p_bool else ('', '')
        try:
            if id != self.ori_detail['qaid'] or name != self.ori_detail[
                    'qaname']:
                self.new_detail_report['qaid'] = id
                self.new_detail_report['qaname'] = name
            else:
                try:
                    del self.new_detail_report['qaid']
                    del self.new_detail_report['qaname']
                except KeyError:
                    pass
        except KeyError:
            self.new_detail_report['qaid'] = id
            self.new_detail_report['qaname'] = name

    @pyqtSlot()
    def on_plainTextEdit_measure_textChanged(self):
        p_str = self.plainTextEdit_measure.toPlainText()
        try:
            if p_str != self.ori_detail['measure']:
                self.new_detail_notice['measure'] = p_str
            else:
                try:
                    del self.new_detail_notice['measure']
                except KeyError:
                    pass
        except KeyError:
            self.new_detail_notice['measure'] = p_str

    @pyqtSlot(bool, str)
    def on_pushButton_dcharger_signChanged(self, p_bool, p_str):
        id, name = p_str.split(' ') if p_bool else ('', '')
        try:
            if id != self.ori_detail['dchargerid'] or name != self.ori_detail[
                    'dchargername']:
                self.new_detail_notice['dchargerid'] = id
                self.new_detail_notice['dchargername'] = name
            else:
                try:
                    del self.new_detail_notice['dchargerid']
                    del self.new_detail_notice['dchargername']
                except KeyError:
                    pass
        except KeyError:
            self.new_detail_notice['dchargerid'] = id
            self.new_detail_notice['dchargername'] = name

    @pyqtSlot(bool, str)
    def on_pushButton_group_signChanged(self, p_bool, p_str):
        id, name = p_str.split(' ') if p_bool else ('', '')
        try:
            if id != self.ori_detail['groupid'] or name != self.ori_detail[
                    'groupname']:
                self.new_detail_notice['groupid'] = id
                self.new_detail_notice['groupname'] = name
            else:
                try:
                    del self.new_detail_notice['groupid']
                    del self.new_detail_notice['groupname']
                except KeyError:
                    pass
        except KeyError:
            self.new_detail_notice['groupid'] = id
            self.new_detail_notice['groupname'] = name

    @pyqtSlot()
    def on_plainTextEdit_done_textChanged(self):
        p_str = self.plainTextEdit_done.toPlainText()
        try:
            if p_str != self.ori_detail['done']:
                self.new_detail_notice['done'] = p_str
            else:
                try:
                    del self.new_detail_notice['done']
                except KeyError:
                    pass
        except KeyError:
            self.new_detail_notice['done'] = p_str

    @pyqtSlot()
    def on_plainTextEdit_checkdone_textChanged(self):
        p_str = self.plainTextEdit_checkdone.toPlainText()
        try:
            if p_str != self.ori_detail['checkdone']:
                self.new_detail_notice['checkdone'] = p_str
            else:
                try:
                    del self.new_detail_notice['checkdone']
                except KeyError:
                    pass
        except KeyError:
            self.new_detail_notice['checkdone'] = p_str

    @pyqtSlot(bool, str)
    def on_pushButton_dncharger_signChanged(self, p_bool, p_str):
        id, name = p_str.split(' ') if p_bool else ('', '')
        try:
            if id != self.ori_detail['dnchargerid'] or name != self.ori_detail[
                    'dnchargername']:
                self.new_detail_notice['dnchargerid'] = id
                self.new_detail_notice['dnchargername'] = name
            else:
                try:
                    del self.new_detail_notice['dnchargerid']
                    del self.new_detail_notice['dnchargername']
                except KeyError:
                    pass
        except KeyError:
            self.new_detail_notice['dnchargerid'] = id
            self.new_detail_notice['dnchargername'] = name

    @pyqtSlot(bool, str)
    def on_pushButton_cd_signChanged(self, p_bool, p_str):
        id, name = p_str.split(' ') if p_bool else ('', '')
        try:
            if id != self.ori_detail['cdid'] or name != self.ori_detail[
                    'cdname']:
                self.new_detail_notice['cdid'] = id
                self.new_detail_notice['cdname'] = name
            else:
                try:
                    del self.new_detail_notice['cdid']
                    del self.new_detail_notice['cdname']
                except KeyError:
                    pass
        except KeyError:
            self.new_detail_notice['cdid'] = id
            self.new_detail_notice['cdname'] = name

    @pyqtSlot(bool, str)
    def on_pushButton_leader_signChanged(self, p_bool, p_str):
        id, name = p_str.split(' ') if p_bool else ('', '')
        try:
            if id != self.ori_detail['leaderid'] or name != self.ori_detail[
                    'leadername']:
                self.new_detail_notice['leaderid'] = id
                self.new_detail_notice['leadername'] = name
            else:
                try:
                    del self.new_detail_notice['leaderid']
                    del self.new_detail_notice['leadername']
                except KeyError:
                    pass
        except KeyError:
            self.new_detail_notice['leaderid'] = id
            self.new_detail_notice['leadername'] = name

    @pyqtSlot(bool, str)
    def on_pushButton_gp_signChanged(self, p_bool, p_str):
        id, name = p_str.split(' ') if p_bool else ('', '')
        try:
            if id != self.ori_detail['gpid'] or name != self.ori_detail[
                    'gpname']:
                self.new_detail_notice['gpid'] = id
                self.new_detail_notice['gpname'] = name
            else:
                try:
                    del self.new_detail_notice['gpid']
                    del self.new_detail_notice['gpname']
                except KeyError:
                    pass
        except KeyError:
            self.new_detail_notice['gpid'] = id
            self.new_detail_notice['gpname'] = name

    @pyqtSlot()
    def on_pushButton_accept_clicked(self):
        if len(self.new_detail_report):
            if self.autoid is None:
                self.new_detail_report['scrid'] = self.scrid
                res = self.SC.update_data(5, **self.new_detail_report)
                self.autoid = res.autoid
            else:
                condition = {'autoid': self.autoid}
                self.SC.update_data(5, condition, **self.new_detail_report)
        self.saved.emit()

    @pyqtSlot()
    def on_pushButton_apply_clicked(self):
        self.new_detail_report['status'] = 1
        if self.autoid is None:
            self.new_detail_report['scrid'] = self.scrid
            self.SC.update_data(5, **self.new_detail_report)
        else:
            condition = {'autoid': self.autoid}
            self.SC.update_data(5, condition, **self.new_detail_report)
        self.accept()

    @pyqtSlot()
    def on_pushButton_save_clicked(self):
        if len(self.new_detail_notice):
            condition = {'autoid': self.autoid}
            self.SC.update_data(5, condition, **self.new_detail_notice)
        self.saved.emit()

    @pyqtSlot()
    def on_pushButton_finish_clicked(self):
        self.new_detail_notice['status'] = 2
        condition = {'autoid': self.autoid}
        self.SC.update_data(5, condition, **self.new_detail_notice)
        self.accept()
class EditSelfCheckRecordModule(QDialog, Ui_Dialog):
    def __init__(self, autoid, parent=None):
        super(EditSelfCheckRecordModule, self).__init__(parent)
        self.setupUi(self)
        self.autoid = autoid
        self.SC = SelfCheckController()
        self.ori_detail = {}
        self.new_detail = {}
        self.get_detail()

    def get_detail(self):
        condition = {'autoid': self.autoid}
        res = self.SC.get_data(4, False, *VALUES_TUPLE_ITEM, **condition)
        if len(res) != 1:
            return
        self.ori_detail = res[0]
        self.plainTextEdit_itemname.setPlainText(self.ori_detail['itemname'])
        self.plainTextEdit_basic.setPlainText(self.ori_detail['gist'])
        self.comboBox_result.setCurrentText(self.ori_detail['result'])
        self.lineEdit_rdate.setText(self.ori_detail['rdate'])
        self.lineEdit_cdate.setText(self.ori_detail['cdate'])

    @pyqtSlot()
    def on_plainTextEdit_basic_textChanged(self):
        p_str = self.plainTextEdit_basic.toPlainText()
        try:
            if p_str != self.ori_detail['gist']:
                self.new_detail['gist'] = p_str
            else:
                try:
                    del self.new_detail['gist']
                except KeyError:
                    pass
        except KeyError:
            self.new_detail['gist'] = 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(str)
    def on_lineEdit_rdate_textChanged(self, p_str):
        try:
            if p_str != self.ori_detail['rdate']:
                self.new_detail['rdate'] = p_str
            else:
                try:
                    del self.new_detail['rdate']
                except KeyError:
                    pass
        except KeyError:
            self.new_detail['rdate'] = p_str

    @pyqtSlot(str)
    def on_lineEdit_cdate_textChanged(self, p_str):
        try:
            if p_str != self.ori_detail['cdate']:
                self.new_detail['cdate'] = p_str
            else:
                try:
                    del self.new_detail['cdate']
                except KeyError:
                    pass
        except KeyError:
            self.new_detail['cdate'] = p_str

    @pyqtSlot()
    def on_pushButton_accept_clicked(self):
        if len(self.new_detail):
            condition = {'autoid': self.autoid}
            self.SC.update_data(4, condition, **self.new_detail)
        self.accept()

    @pyqtSlot()
    def on_pushButton_cancel_clicked(self):
        self.close()
Exemple #3
0
class SelfCheckReportModule(QDialog, Ui_Dialog):
    modified = pyqtSignal()

    def __init__(self, autoid=None, parent=None):
        super(SelfCheckReportModule, self).__init__(parent)
        self.setupUi(self)
        self.autoid = autoid
        # 自检项目的id
        self.dscrid = 0
        self.scrid = None
        self.rectify_status = 0
        self.temp_dept = ''
        self.SC = SelfCheckController()
        self.ori_detail_record = {}
        self.new_detail_record = {}
        self.ori_detail_report = {}
        self.new_detail_report = {}
        self.ori_detail_kind = {}
        self.new_detail_kind = {}
        self.checkkindlist = []
        self.treeWidget_checkitem.hideColumn(0)
        # self.treeWidget_checkrecords.hideColumn(0)
        self.get_detail()
        self.get_dept_list()
        self.get_rectify_report_list()
        self.get_checkreport()

    def get_detail(self):
        if self.autoid is None:
            self.dateEdit_cdate.setDate(user.now_date)
            self.label_creator.setText(
                user.user_id + ' ' + user.user_name
            )
            self.tabWidget.setTabVisible(1, False)
            self.tabWidget.setTabVisible(2, False)
            return
        condition = {'autoid': self.autoid}
        res = self.SC.get_data(1, False, *VALUES_TUPLE_ITEM, **condition)
        if len(res) != 1:
            return
        self.ori_detail_record = res[0]
        self.dateEdit_cdate.setDate(self.ori_detail_record['cdate'])
        self.lineEdit_title.setText(self.ori_detail_record['title'])
        self.label_creator.setText(
            self.ori_detail_record['creatorid'] + ' ' +
            self.ori_detail_record['creatorname']
        )
        self.plainTextEdit_summary.setPlainText(
            self.ori_detail_record['summary']
        )


    def get_dept_list(self):
        self.comboBox_dept.clear()
        condition = {'scrid': self.autoid}
        res = self.SC.get_data(3, True, *VALUES_TUPLE_DEPT, **condition).\
            distinct()
        if len(res):
            self.comboBox_dept.addItems(res)
        if self.comboBox_dept.findText(self.temp_dept, Qt.MatchExactly):
            self.comboBox_dept.setCurrentText(self.temp_dept)

    def get_rectify_report_list(self):
        self.treeWidget_rectify.clear()
        condition = {'scrid': self.autoid, 'status': self.rectify_status}
        res = self.SC.get_data(5, False, *VALUES_TUPLE_RECTIFY, **condition)
        if not len(res):
            return
        for item in res:
            qtreeitem = QTreeWidgetItem(self.treeWidget_rectify)
            qtreeitem.setText(0, str(item['autoid']))
            qtreeitem.setText(1, item['deptid'] + ' ' + item['deptname'])
            qtreeitem.setText(2, item['accordance'])
            qtreeitem.setText(3, item['qaid'] + ' ' + item['qaname'])
        for i in range(1, 4):
            self.treeWidget_rectify.resizeColumnToContents(i)

    @pyqtSlot(int)
    def on_tabWidget_2_currentChanged(self, p_int):
        self.rectify_status = p_int
        getattr(self, 'rectify_' + str(p_int)).setLayout(self.gridLayout_7)
        self.get_rectify_report_list()


    @pyqtSlot(str)
    def on_lineEdit_seqid_textChanged(self, p_str):
        p_int = int(p_str)
        try:
            if p_int != self.ori_detail['seqid']:
                self.new_detail['seqid'] = p_int
            else:
                try:
                    del self.new_detail['seqid']
                except KeyError:
                    pass
        except KeyError:
            self.new_detail['seqid'] = p_int

    @pyqtSlot(str)
    def on_comboBox_dept_currentTextChanged(self, p_str):
        self.treeWidget_checkitem.clear()
        condition = {'deptname': p_str, 'scrid_id': self.autoid}
        self.checkkindlist = self.SC.get_data(
            3, False, *VALUES_TUPLE_KIND, **condition
        )
        if not len(self.checkkindlist):
            return
        for item in self.checkkindlist:
            qtreeitem = QTreeWidgetItem(self.treeWidget_checkitem)
            qtreeitem.setText(0, str(item['autoid']))
            qtreeitem.setText(1, item['kind'])

    @pyqtSlot(QPoint)
    def on_treeWidget_checkitem_customContextMenuRequested(self, pos):
        if self.autoid is None:
            return
        current_item = self.treeWidget_checkitem.currentItem()
        menu = QMenu()
        action_1 = menu.addAction("新增自检记录")
        action_2 = menu.addAction("删除自检记录")
        global_pos = self.treeWidget_checkitem.mapToGlobal(pos)
        action = menu.exec(global_pos)
        if action == action_1:
            detail = AddCheckRecord(self.autoid, self)
            self.temp_dept = self.comboBox_dept.currentText()
            detail.accepted.connect(self.added_dept)
            detail.accepted.connect(self.get_dept_list)
            detail.show()
        elif action == action_2:
            if current_item is None:
                return
            id = int(current_item.text(0))
            condition = {'autoid': id}
            self.SC.delete_data(3, condition)
            self.temp_dept = self.comboBox_dept.currentText()
            self.get_dept_list()

    @pyqtSlot(QPoint)
    def on_treeWidget_rectify_customContextMenuRequested(self, pos):
        current_item = self.treeWidget_rectify.currentItem()
        menu = QMenu()
        action_1 = menu.addAction("新增整改通知")
        action_2 = menu.addAction("修改整改通知")
        action_3 = menu.addAction("删除整改通知")
        global_pos = self.treeWidget_rectify.mapToGlobal(pos)
        action = menu.exec(global_pos)
        if action == action_1:
            detail = RectifyReportModule(scrid=self.autoid, parent=self)
            detail.saved.connect(self.get_rectify_report_list)
            detail.accepted.connect(self.get_rectify_report_list)
            detail.show()
        elif action == action_2:
            if current_item is None:
                return
            id = int(current_item.text(0))
            detail = RectifyReportModule(autoid=id, parent=self)
            detail.saved.connect(self.get_rectify_report_list)
            detail.accepted.connect(self.get_rectify_report_list)
            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(5, condition)
            self.get_rectify_report_list()

    @pyqtSlot(QPoint)
    def on_treeWidget_scsigns_customContextMenuRequested(self, pos):
        current_item = self.treeWidget_scsigns.currentItem()
        menu = QMenu()
        action_1 = menu.addAction("删除")
        global_pos = self.treeWidget_scsigns.mapToGlobal(pos)
        action = menu.exec(global_pos)
        if action == action_1:
            if current_item is None:
                return
            index = self.treeWidget_scsigns.indexOfTopLevelItem(current_item)
            self.treeWidget_scsigns.takeTopLevelItem(index)

    @pyqtSlot(QPoint)
    def on_treeWidget_deptsigns_customContextMenuRequested(self, pos):
        current_item = self.treeWidget_deptsigns.currentItem()
        menu = QMenu()
        action_1 = menu.addAction("删除")
        global_pos = self.treeWidget_deptsigns.mapToGlobal(pos)
        action = menu.exec(global_pos)
        if action == action_1:
            if current_item is None:
                return
            index = self.treeWidget_deptsigns.indexOfTopLevelItem(current_item)
            self.treeWidget_deptsigns.takeTopLevelItem(index)

    def added_dept(self):
        self.temp_dept = user.dept_name

    @pyqtSlot(QTreeWidgetItem, int)
    def on_treeWidget_checkitem_itemClicked(self, qtreeitem, p_int):
        # 点击种类列表中的项目
        self.dscrid = int(qtreeitem.text(0))
        self.get_checkrecords()

    def get_checkrecords(self):
        self.treeWidget_checkrecords.clear()

        condition = {'dscrid_id': self.dscrid}
        res = self.SC.get_data(4, False, *VALUES_TUPLE_CHECKITEM, **condition)
        if not len(res):
            return
        for item in res:
            qtreeitem = QTreeWidgetItem(self.treeWidget_checkrecords)
            qtreeitem.setText(0, str(item['autoid']))
            qtreeitem.setText(1, str(item['seqid']))
            qtreeitem.setText(2, item['itemname'])
            qtreeitem.setText(3, item['gist'])
            qtreeitem.setText(4, item['result'])
            qtreeitem.setText(5, item['rdate'])
            qtreeitem.setText(6, item['cdate'])
        for i in range(1, 7):
            self.treeWidget_checkrecords.resizeColumnToContents(i)
        self.ori_detail_kind = None
        for item in self.checkkindlist:
            if item['autoid'] == self.dscrid:
                self.ori_detail_kind = item
                break
        if self.ori_detail_kind is None:
            return
        self.label_dept.setText(
            self.ori_detail_kind['deptid'] + ' ' + self.ori_detail_kind['deptname']
        )
        self.label_checkitem.setText(self.ori_detail_kind['kind'])
        self.dateEdit_checkdate.setDate(self.ori_detail_kind['checkdate'])
        self.lineEdit_checkers.setText(self.ori_detail_kind['checkers'])
        self.plainTextEdit_measure.setPlainText(self.ori_detail_kind['measure'])
        self.plainTextEdit_evaluation.setPlainText(
            self.ori_detail_kind['evaluation']
        )
        self.lineEdit_conclusion.setText(self.ori_detail_kind['conclusion'])
        self.label_charger.setText(
            self.ori_detail_kind['chargerid'] + ' ' +
            self.ori_detail_kind['chargername']
        )
        self.dateEdit_chdate.setDate(self.ori_detail_kind['chdate'])

    def get_checkreport(self):
        if self.autoid is None:
            return
        condition = {'scrid': self.autoid}
        res = self.SC.get_data(2, False, *VALUES_TUPLE_REPORT, **condition)

        if not len(res):
            self.dateEdit_fromdate.setDate(user.now_date)
            self.dateEdit_todate.setDate(user.now_date)
            return
        self.ori_detail_report = res[0]
        self.scrid = self.ori_detail_report['autoid']
        self.dateEdit_fromdate.setDate(self.ori_detail_report['fromdate'])
        self.dateEdit_todate.setDate((self.ori_detail_report['todate']))
        self.pushButton_charger.setText(
            self.ori_detail_report['chargerid'] + ' ' +
            self.ori_detail_report['chargername']
        )
        self.plainTextEdit_scrange.setPlainText(
            self.ori_detail_report['scrange']
        )
        self.plainTextEdit_assess.setPlainText(
            self.ori_detail_report['assess']
        )
        self.plainTextEdit_flaws.setPlainText(
            self.ori_detail_report['flaws']
        )
        self.plainTextEdit_description.setPlainText(
            self.ori_detail_report['description']
        )
        scsigns = self.ori_detail_report['scsigns']
        for item in scsigns.split(';'):
            try:
                id, name = item.split(' ')
                qtreeitem = QTreeWidgetItem(self.treeWidget_scsigns)
                qtreeitem.setText(0, id)
                qtreeitem.setText(1, name)
            except ValueError:
                pass
        deptsigns = self.ori_detail_report['deptsigns']
        for item in deptsigns.split(';'):
            try:
                id, name = item.split(' ')
                qtreeitem = QTreeWidgetItem(self.treeWidget_deptsigns)
                qtreeitem.setText(0, id)
                qtreeitem.setText(1, name)
            except ValueError:
                pass


    @pyqtSlot(QTreeWidgetItem, int)
    def on_treeWidget_checkrecords_itemDoubleClicked(self, qtreeitem, p_int):
        id = int(qtreeitem.text(0))
        detail = EditSelfCheckRecordModule(id, self)
        detail.accepted.connect(self.get_checkrecords)
        detail.show()

    @pyqtSlot(QTreeWidgetItem, int)
    def on_treeWidget_rectify_itemDoubleClicked(self, qtreeitem, p_int):
        id = int(qtreeitem.text(0))
        detail = RectifyReportModule(autoid=id, parent=self)
        detail.saved.connect(self.get_rectify_report_list)
        detail.accepted.connect(self.get_rectify_report_list)
        detail.show()



    @pyqtSlot(QDate)
    def on_dateEdit_cdate_dateChanged(self, q_date):
        try:
            if type(self.ori_detail_record['cdate']) is str:
                self.new_detail_record['cdate'] = q_date.toPyDate()
                return
            if q_date != QDate(self.ori_detail_record['cdate']):
                self.new_detail_record['cdate'] = q_date.toPyDate()
            else:
                try:
                    del self.new_detail_record['cdate']
                except KeyError:
                    pass
        except KeyError:
            self.new_detail_record['cdate'] = q_date.toPyDate()

    @pyqtSlot(str)
    def on_lineEdit_title_textChanged(self, p_str):
        try:
            if p_str != self.ori_detail_record['title']:
                self.new_detail_record['title'] = p_str
            else:
                try:
                    del self.new_detail_record['title']
                except KeyError:
                    pass
        except KeyError:
            self.new_detail_record['title'] = p_str

    @pyqtSlot()
    def on_plainTextEdit_summary_textChanged(self):
        p_str = self.plainTextEdit_evaluation.toPlainText()
        try:
            if p_str != self.ori_detail_record['summary']:
                self.new_detail_record['summary'] = p_str
            else:
                try:
                    del self.new_detail_record['summary']
                except KeyError:
                    pass
        except KeyError:
            self.new_detail_record['summary'] = p_str

    @pyqtSlot()
    def on_pushButton_modify_clicked(self):
        if len(self.new_detail_record):
            self.new_detail_record['creatorid'] = user.user_id
            self.new_detail_record['creatorname'] = user.user_name
            self.label_creator.setText(user.user_id + ' ' + user.user_name)
            if self.autoid is None:
                res = self.SC.update_data(1, **self.new_detail_record)
                self.autoid = res.autoid
                self.tabWidget.setTabVisible(1, True)
                self.tabWidget.setTabVisible(2, True)
            else:
                condition = {'autoid': self.autoid}
                self.SC.update_data(1, condition, **self.new_detail_record)
            self.modified.emit()

    @pyqtSlot()
    def on_plainTextEdit_itemname_textChanged(self):
        p_str = self.plainTextEdit_itemname.toPlainText()
        try:
            if p_str != self.ori_detail['itemname']:
                self.new_detail['itemname'] = p_str
            else:
                try:
                    del self.new_detail['itemname']
                except KeyError:
                    pass
        except KeyError:
            self.new_detail['itemname'] = p_str

    @pyqtSlot()
    def on_plainTextEdit_basic_textChanged(self):
        p_str = self.plainTextEdit_basic.toPlainText()
        try:
            if p_str != self.ori_detail['basic']:
                self.new_detail['basic'] = p_str
            else:
                try:
                    del self.new_detail['basic']
                except KeyError:
                    pass
        except KeyError:
            self.new_detail['basic'] = p_str

    @pyqtSlot(QDate)
    def on_dateEdit_checkdate_dateChanged(self, q_date):
        try:
            if type(self.ori_detail_kind['checkdate']) is str:
                self.new_detail_kind['checkdate'] = q_date.toPyDate()
                return
            if q_date != QDate(self.ori_detail_kind['checkdate']):
                self.new_detail_kind['checkdate'] = q_date.toPyDate()
            else:
                try:
                    del self.new_detail_kind['checkdate']
                except KeyError:
                    pass
        except KeyError:
            self.new_detail_kind['checkdate'] = q_date.toPyDate()

    @pyqtSlot(str)
    def on_lineEdit_checkers_textChanged(self, p_str):
        try:
            if p_str != self.ori_detail_kind['checkers']:
                self.new_detail_kind['checkers'] = p_str
            else:
                try:
                    del self.new_detail_kind['checkers']
                except KeyError:
                    pass
        except KeyError:
            self.new_detail_kind['checkers'] = p_str

    @pyqtSlot()
    def on_plainTextEdit_measure_textChanged(self):
        p_str = self.plainTextEdit_measure.toPlainText()
        try:
            if p_str != self.ori_detail_kind['measure']:
                self.new_detail_kind['measure'] = p_str
            else:
                try:
                    del self.new_detail_kind['measure']
                except KeyError:
                    pass
        except KeyError:
            self.new_detail_kind['measure'] = p_str

    @pyqtSlot()
    def on_plainTextEdit_evaluation_textChanged(self):
        p_str = self.plainTextEdit_evaluation.toPlainText()
        try:
            if p_str != self.ori_detail_kind['evaluation']:
                self.new_detail_kind['evaluation'] = p_str
            else:
                try:
                    del self.new_detail_kind['evaluation']
                except KeyError:
                    pass
        except KeyError:
            self.new_detail_kind['evaluation'] = p_str

    @pyqtSlot(str)
    def on_lineEdit_conclusion_textChanged(self, p_str):
        try:
            if p_str != self.ori_detail_kind['conclusion']:
                self.new_detail_kind['conclusion'] = p_str
            else:
                try:
                    del self.new_detail_kind['conclusion']
                except KeyError:
                    pass
        except KeyError:
            self.new_detail_kind['conclusion'] = p_str

    @pyqtSlot(QDate)
    def on_dateEdit_chdate_dateChanged(self, q_date):
        try:
            if type(self.ori_detail_kind['chdate']) is str:
                self.new_detail_kind['chdate'] = q_date.toPyDate()
                return
            if q_date != QDate(self.ori_detail_kind['chdate']):
                self.new_detail_kind['chdate'] = q_date.toPyDate()
            else:
                try:
                    del self.new_detail_kind['chdate']
                except KeyError:
                    pass
        except KeyError:
            self.new_detail_kind['chdate'] = q_date.toPyDate()

    @pyqtSlot()
    def on_pushButton_accept_clicked(self):
        if len(self.new_detail_kind):
            self.new_detail_kind['chargerid'] = user.user_id
            self.new_detail_kind['chargername'] = user.user_name
            self.label_charger.setText(user.user_id + ' ' + user.user_name)
            if self.dscrid:
                condition = {'autoid': self.dscrid}
                self.SC.update_data(3, condition, **self.new_detail_kind)
                self.new_detail_kind = {}
            self.modified.emit()

    @pyqtSlot()
    def on_pushButton_cancel_clicked(self):
        self.close()


    @pyqtSlot(QDate)
    def on_dateEdit_fromdate_dateChanged(self, q_date):
        try:
            if type(self.ori_detail_report['fromdate']) is str:
                self.new_detail_report['fromdate'] = q_date.toPyDate()
                return
            if q_date != QDate(self.ori_detail_report['fromdate']):
                self.new_detail_report['fromdate'] = q_date.toPyDate()
            else:
                try:
                    del self.new_detail_report['fromdate']
                except KeyError:
                    pass
        except KeyError:
            self.new_detail_report['fromdate'] = q_date.toPyDate()

    @pyqtSlot(QDate)
    def on_dateEdit_todate_dateChanged(self, q_date):
        try:
            if type(self.ori_detail_report['todate']) is str:
                self.new_detail_report['todate'] = q_date.toPyDate()
                return
            if q_date != QDate(self.ori_detail_report['todate']):
                self.new_detail_report['todate'] = q_date.toPyDate()
            else:
                try:
                    del self.new_detail_report['todate']
                except KeyError:
                    pass
        except KeyError:
            self.new_detail_report['todate'] = q_date.toPyDate()

    @pyqtSlot(bool, str)
    def on_pushButton_charger_signChanged(self, p_bool, p_str):
        id, name = p_str.split(' ') if p_bool else ('', '')
        try:
            if id != self.ori_detail_report['chargerid'] or \
                    name != self.ori_detail_report['chargername']:
                self.new_detail_report['chargerid'] = id
                self.new_detail_report['chargername'] = name
            else:
                try:
                    del self.new_detail_report['chargerid']
                    del self.new_detail_report['chargername']
                except KeyError:
                    pass
        except KeyError:
            self.new_detail_report['chargerid'] = id
            self.new_detail_report['chargername'] = name


    @pyqtSlot()
    def on_pushButton_scsign_clicked(self):
        detail = SignModule(self)
        detail.userchanged.connect(self.scsign)
        detail.show()

    @pyqtSlot()
    def on_pushButton_deptsign_clicked(self):
        detail = SignModule(self)
        detail.userchanged.connect(self.deptsign)
        detail.show()

    def scsign(self, p_bool, p_str):
        if p_bool:
            id, name = p_str.split(' ')
            qtreeitem = QTreeWidgetItem(self.treeWidget_scsigns)
            qtreeitem.setText(0, id)
            qtreeitem.setText(1, name)

    def deptsign(self, p_bool, p_str):
        if p_bool:
            id, name = p_str.split(' ')
            qtreeitem = QTreeWidgetItem(self.treeWidget_deptsigns)
            qtreeitem.setText(0, id)
            qtreeitem.setText(1, name)

    @pyqtSlot()
    def on_plainTextEdit_scrange_textChanged(self):
        p_str = self.plainTextEdit_scrange.toPlainText()
        try:
            if p_str != self.ori_detail_report['scrange']:
                self.new_detail_report['scrange'] = p_str
            else:
                try:
                    del self.new_detail_report['scrange']
                except KeyError:
                    pass
        except KeyError:
            self.new_detail_report['scrange'] = p_str

    @pyqtSlot()
    def on_plainTextEdit_assess_textChanged(self):
        p_str = self.plainTextEdit_assess.toPlainText()
        try:
            if p_str != self.ori_detail_report['assess']:
                self.new_detail_report['assess'] = p_str
            else:
                try:
                    del self.new_detail_report['assess']
                except KeyError:
                    pass
        except KeyError:
            self.new_detail_report['assess'] = p_str

    @pyqtSlot()
    def on_plainTextEdit_flaws_textChanged(self):
        p_str = self.plainTextEdit_flaws.toPlainText()
        try:
            if p_str != self.ori_detail_report['flaws']:
                self.new_detail_report['flaws'] = p_str
            else:
                try:
                    del self.new_detail_report['flaws']
                except KeyError:
                    pass
        except KeyError:
            self.new_detail_report['flaws'] = p_str

    @pyqtSlot()
    def on_plainTextEdit_description_textChanged(self):
        p_str = self.plainTextEdit_description.toPlainText()
        try:
            if p_str != self.ori_detail_report['description']:
                self.new_detail_report['description'] = p_str
            else:
                try:
                    del self.new_detail_report['description']
                except KeyError:
                    pass
        except KeyError:
            self.new_detail_report['description'] = p_str

    @pyqtSlot()
    def on_pushButton_save_clicked(self):
        self.get_scsigns()
        self.get_deptsigns()
        if len(self.new_detail_report):
            if self.scrid is None:
                self.new_detail_report['scrid'] = self.autoid
                self.SC.update_data(2, **self.new_detail_report)
            else:
                condition = {'autoid': self.scrid}
                self.SC.update_data(2, condition, **self.new_detail_report)

    def get_scsigns(self):
        user_list = ''
        it = QTreeWidgetItemIterator(self.treeWidget_scsigns)
        while it.value():
            qtreeitem = it.value()
            user_list += qtreeitem.text(0) + ' ' + qtreeitem.text(1) + ';'
            it += 1
        try:
            if user_list != self.ori_detail_report['scsigns']:
                self.new_detail_report['scsigns'] = user_list
        except KeyError:
            pass

    def get_deptsigns(self):
        user_list = ''
        it = QTreeWidgetItemIterator(self.treeWidget_deptsigns)
        while it.value():
            qtreeitem = it.value()
            user_list += qtreeitem.text(0) + ' ' + qtreeitem.text(1) + ';'
            it += 1
        try:
            if user_list != self.ori_detail_report['deptsigns']:
                self.new_detail_report['deptsigns'] = user_list
        except KeyError:
            pass