Skip to content
Snippets Groups Projects
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
distribution_setup_controller.py 3.63 KiB
from math import ceil
from PyQt5 import QtWidgets as Qt
from PyQt5.QtCore import pyqtSlot
from PyQt5.QtWidgets import QDialog

from controllers.requirement_dialog import NewRequirementDialog, RequirementEditDialog
from model.requirements import Requirement
from utils.groups_table import GroupsTable
from utils.requirements_table import RequirementsTable
from windows import distributionsetup


# TODO throw exception for empty groups
class DistributionSetup(Qt.QWidget, distributionsetup.Ui_Form):
    def __init__(self, main_window, group, parent=None):
        """
        :param main_window: main window controller 
        :param group: (Group) that is being distributed
        :param parent: 
        """
        super(DistributionSetup, self).__init__(parent)
        self.setupUi(self)
        self.tableRequirements = RequirementsTable(2, ["edit", "-"])
        self.placeTable.insertWidget(1, self.tableRequirements)
        self.tableRequirements.btnClicked.connect(self.onTableRequirementsBtnClicked)
        self.tableRequirements.itemDoubleClicked.connect(self.editRequirement)
        self.group = group

        # set up header
        self.lblGroupName.setText(self.group.name)
        self.lblMemberCount.setText('(' + str(self.group.member_count) + ' členů)')

        # set up spinners
        self.spinTeamCount.setMinimum(1)
        self.spinTeamCount.setMaximum(self.group.member_count)
        self.spinMinTeamSize.setMinimum(0)
        self.spinMinTeamSize.setMaximum(self.group.member_count)
        self.spinMaxTeamSize.setMinimum(1)
        self.spinMaxTeamSize.setMaximum(self.group.member_count)
        self.spinMaxTeamSize.setValue(self.group.member_count)

        # set up checkboxes
        self.cbIgnoreTeamCount.stateChanged.connect(self.spinTeamCount.setDisabled)
        self.cbIgnoreMinSize.stateChanged.connect(self.spinMinTeamSize.setDisabled)
        self.cbIgnoreMaxSize.stateChanged.connect(self.spinMaxTeamSize.setDisabled)

        self.btnAddRequirement.clicked.connect(self.showRequirementDialog)
        self.btnDistribute.clicked.connect(self.distribute)

    @pyqtSlot()
    def showRequirementDialog(self):
        dialog = NewRequirementDialog(self.group, self.tableRequirements.model.sourceModel().requirements, parent=self)
        dialog.exec_()
        if dialog.result() == dialog.Accepted:
            if dialog.requirement is not None:
                self.tableRequirements.insertRequirement(dialog.requirement)

    @pyqtSlot(Requirement, int)
    def onTableRequirementsBtnClicked(self, requirement, btn_nr):
        if btn_nr == 0:
            # it's btn "edit"
            self.editRequirement(requirement)
        elif btn_nr == 1:
            # it's btn "delete"
            self.deleteRequirement(requirement)

    def editRequirement(self, requirement):
        self.tableRequirements.model.sourceModel().removeRequirement(requirement)
        dialog = RequirementEditDialog(self.group, requirement)
        dialog.exec_()
        if dialog.result() == dialog.Accepted:
            if dialog.requirement is not None:
                self.tableRequirements.insertRequirement(dialog.requirement)
        else:
            self.tableRequirements.insertRequirement(requirement)

    def deleteRequirement(self, requirement):
        msg = Qt.QMessageBox(self)
        msg.setIcon(Qt.QMessageBox.Question)
        msg.setWindowTitle("Odebrat omezení?")
        msg.setText("Chcete odebrat toto omezení?")
        msg.setStandardButtons(Qt.QMessageBox.Ok | Qt.QMessageBox.Cancel)
        if msg.exec() == Qt.QMessageBox.Ok:
            self.tableRequirements.model.sourceModel().removeRequirement(requirement)

    def distribute(self):
        ...