def __init__(self, owner):
        super(AssignmentDialog, self).__init__()
        self.ui = Ui_assignmentDialog()
        self.ui.setupUi(self)
        self.tbl = self.ui.tableWidget

        self.owner = owner
        self._load_label()

        self._load_table(self.owner.assignments)

        self.tbl.cellClicked.connect(self._item_selected)
        self.ui.addBtn.clicked.connect(self._add_clicked)
        self.ui.saveBtn.clicked.connect(self._save_clicked)
        self.ui.removeBtn.clicked.connect(self._remove_clicked)

        self.setMinimumWidth(800)
class AssignmentDialog(QDialog):

    # noinspection PyUnresolvedReferences
    def __init__(self, owner):
        super(AssignmentDialog, self).__init__()
        self.ui = Ui_assignmentDialog()
        self.ui.setupUi(self)
        self.tbl = self.ui.tableWidget

        self.owner = owner
        self._load_label()

        self._load_table(self.owner.assignments)

        self.tbl.cellClicked.connect(self._item_selected)
        self.ui.addBtn.clicked.connect(self._add_clicked)
        self.ui.saveBtn.clicked.connect(self._save_clicked)
        self.ui.removeBtn.clicked.connect(self._remove_clicked)

        self.setMinimumWidth(800)

    def _load_label(self):
        txt = 'Assignments for '
        if type(self.owner) is Project:
            txt += self.owner.nickname
        else:
            txt += self.owner.name
        self.ui.ownerLabel.setText(txt)

    def _load_table(self, assignments):
        from PyQt5.QtCore import Qt
        self.tbl.clear()
        if not assignments:
            return
        self.tbl.setRowCount(len(assignments))
        self.tbl.setColumnCount(4)
        self.tbl.setHorizontalHeaderLabels([
            'Employee' if type(self.owner) is Project else 'Project',
            'FM', 'LM', '%'
        ])
        self.tbl.verticalHeader().hide()
        self.tbl.setColumnWidth(0, 180)
        self.tbl.setColumnWidth(1, 50)
        self.tbl.setColumnWidth(2, 50)
        self.tbl.setColumnWidth(3, 30)

        for row, asn in enumerate(assignments):
            if type(self.owner) is Project:
                item = QTableWidgetItem(asn.employee_name)
            else:
                item = QTableWidgetItem(asn.project_name)
            self.tbl.setItem(row, 0, item)
            item = QTableWidgetItem(Monkey.prettify(asn.first_month))
            item.setTextAlignment(Qt.AlignRight)
            self.tbl.setItem(row, 1, item)
            item = QTableWidgetItem(Monkey.prettify(asn.last_month))
            item.setTextAlignment(Qt.AlignRight)
            self.tbl.setItem(row, 2, item)
            item = QTableWidgetItem(str(asn.effort))
            item.setTextAlignment(Qt.AlignRight)
            self.tbl.setItem(row, 3, item)
        self.tbl.setCurrentItem(self.tbl.item(0, 0))
        self._item_selected()

    def _item_selected(self):
        asn = self.owner.assignments[self.tbl.currentIndex().row()]
        self.ui.firstMonthEdit.setText(Monkey.prettify(asn.first_month))
        self.ui.lastMonthEdit.setText(Monkey.prettify(asn.last_month))
        self.ui.effortEdit.setText(str(asn.effort))
        self.ui.notesEdit.setPlainText(asn.notes)

    def _add_clicked(self):
        # self.current_prj_id = None
        self._clear_form()
        self.ui.firstMonthEdit.setFocus()

    def _clear_form(self):
        self.ui.firstMonthEdit.setText(None)
        self.ui.lastMonthEdit.setText(None)
        self.ui.effortEdit.setText(None)
        self.ui.notesEdit.setPlainText(None)

    def _save_clicked(self):
        pass
        # prj = self._valid_prj()
        # if prj:
        #     prj.save()
        #     self._load()

    def _is_valid_input(self):
        pass
        # name = self.ui.nameEdit.text()
        # if not name:
        #     msg = 'Project name is required!'
        #     QMessageBox.critical(QMessageBox(), 'Input Error', msg)
        #     self.ui.nameEdit.setFocus()
        #     return None
        # nickname = self.ui.nicknameEdit.text()
        # if not nickname:
        #     msg = 'Project nickname is required!'
        #     QMessageBox.critical(QMessageBox(), 'Input Error', msg)
        #     self.ui.nicknameEdit.setFocus()
        #     return None
        # if self.project_dict[nickname]:
        #     msg = 'Project nickname must be unique!'
        #     QMessageBox.critical(QMessageBox(), 'Input Error', msg)
        #     self.ui.nicknameEdit.setFocus()
        #     return None
        # first_month = self.ui.firstMonthEdit.text()
        # last_month = self.ui.lastMonthEdit.text()
        # if not Monkey.is_valid_pair(first_month, last_month):
        #     msg = 'Invalid time frame: invalid month or first month after last month!'
        #     QMessageBox.critical(QMessageBox(), 'Input Error', msg)
        #     self.ui.firstMonthEdit.setFocus()
        #     return None
        # notes = self.ui.notesEdit.toPlainText()
        # return Project([
        #     self.current_prj_id, nickname, name, int(first_month), int(last_month), notes
        # ])

    def _remove_clicked(self):
        # nickname = self.ui.nicknameEdit.text()
        msg = 'Are you sure you want to remove assignment ?'
        reply = QMessageBox.question(QMessageBox(), 'Double check', msg)