Skip to content
Snippets Groups Projects
Commit ea9b68be authored by Jakub Štercl's avatar Jakub Štercl
Browse files

some more moving and API for DistributionMaker updates

parent f252a7b7
No related branches found
No related tags found
No related merge requests found
No preview for this file type
from enum import Enum
from random import shuffle
from PyQt5.QtCore import pyqtSlot
from PyQt5.QtWidgets import QWidget, QMessageBox
from controllers.base_controller import BaseController
......@@ -123,13 +125,13 @@ class DistributionSetup(BaseController, QWidget, distributionsetup.Ui_Form):
if successful, move to DistributionOverview, else show error message
"""
dist_maker = DistributionMaker(
self.group,
self.group.members,
self.tableRequirements.getAllRequirements(),
Violated,
team_count=self.spinTeamCount.value() if not self.cbIgnoreTeamCount.isChecked() else None,
min_team_size=self.spinMinTeamSize.value() if not self.cbIgnoreMinSize.isChecked() else None,
max_team_size=self.spinMaxTeamSize.value() if not self.cbIgnoreMaxSize.isChecked() else None,
prefer=self.comboPrefer.currentData()
self.spinTeamCount.value() if not self.cbIgnoreTeamCount.isChecked() else None,
self.spinMinTeamSize.value() if not self.cbIgnoreMinSize.isChecked() else None,
self.spinMaxTeamSize.value() if not self.cbIgnoreMaxSize.isChecked() else None,
self.comboPrefer.currentData()
)
teams = dist_maker.distribute()
print(dist_maker.getViolatedRequirements())
......@@ -146,10 +148,10 @@ class DistributionSetup(BaseController, QWidget, distributionsetup.Ui_Form):
btn_back = msg.addButton(self.tr("Upravit požadavky"), QMessageBox.NoRole)
msg.exec_()
if msg.clickedButton() == btn_show_anyways:
self.main_window.goToDistributionOverview(teams, self.group)
self.main_window.goToDistributionOverview(self.createTeamsDict(teams), self.group)
if msg.clickedButton() == btn_repeat:
return self.distribute()
self.main_window.goToDistributionOverview(teams, self.group)
self.main_window.goToDistributionOverview(self.createTeamsDict(teams), self.group)
 
def createDetailedText(self, requirements):
res = ''
......@@ -168,6 +170,18 @@ class DistributionSetup(BaseController, QWidget, distributionsetup.Ui_Form):
res += "\n"
return res
 
def createTeamsDict(self, teams):
"""
transform list of teams into dict
:param teams: list of lists (or sets or whatever iterable) of members [{Member, Member ...}, {Member, ...}, ...]
:return: dict of teams {"Team 1": [Member, Member ...], "Team 2": [Member, ...], ...}
"""
res = {}
shuffle(teams)
for team_nr, team in enumerate(teams):
res[self.tr("Tým") + " " + str(team_nr + 1)] = list(teams[team_nr])
return res
 
class Violated(Enum):
"""
......
......@@ -9,6 +9,7 @@ from PyQt5.QtCore import QTranslator
from controllers.mainwindow_controller import MainWindow
from utils.database import Database
from utils.globals import Global
from resources import resources_rc
 
 
def main():
......
......@@ -24,12 +24,6 @@ class Member:
"""
Global.db.deleteMember(self.id_)
 
def removeFromGroup(self):
"""
remove this member from current group
"""
Global.db.unsetGroupFromMember(self.id_)
def rename(self, new_name):
"""
rename this member
......
......@@ -239,13 +239,6 @@ class Database:
"""
self.connection.execute('''DELETE FROM member WHERE member_id = ?''', (member_id,))
 
def unsetGroupFromMember(self, member_id):
"""
set members group to NULL
:param member_id:
"""
self.connection.execute('''UPDATE member SET group = NULL WHERE member_id = ?''',(member_id,))
def changeMemberName(self, member_id, new_name):
"""
set members name to new_name
......
......@@ -2,15 +2,11 @@ from random import shuffle
from model.requirements import RequirementSameTeam, RequirementDifferentTeam
 
 
class ImpossibleDistributionError(Exception):
pass
class DistributionMaker:
PREFER_SAME_TEAMS = False
PREFER_DIFFERENT_TEAMS = True
 
def __init__(self, group, requirements, enum_violated, team_count=None, min_team_size=None, max_team_size=None, prefer=None):
def __init__(self, members, requirements, enum_violated, team_count, min_team_size, max_team_size, prefer):
self.requirements_same = [
requirement for requirement in requirements if isinstance(requirement, RequirementSameTeam)
]
......@@ -18,12 +14,12 @@ class DistributionMaker:
requirement for requirement in requirements if isinstance(requirement, RequirementDifferentTeam)
]
self.team_count = team_count
self.member_count = group.member_count
self.member_count = len(members)
self.min_team_size = min_team_size if min_team_size is not None else 1
self.max_team_size = max_team_size if max_team_size is not None else self.member_count
self.prefer = prefer
self.members = group.members
self.unassigned = [{member} for member in group.members]
self.members = members
self.unassigned = [{member} for member in members]
self.violated_requirements = []
self.enum_violated = enum_violated
 
......@@ -69,7 +65,7 @@ class DistributionMaker:
self.checkTeamValid(team)
if len(teams) != self.team_count:
self.violated_requirements.append(self.enum_violated.TEAM_COUNT)
return self.createTeamsDict(teams)
return teams
 
def getViolatedRequirements(self):
"""
......@@ -199,18 +195,6 @@ class DistributionMaker:
self.printTeams(teams)
return teams
 
def createTeamsDict(self, teams):
"""
transform list of teams into dict
:param teams: list of lists (or sets or whatever iterable) of members [{Member, Member ...}, {Member, ...}, ...]
:return: dict of teams {"Team 1": [Member, Member ...], "Team 2": [Member, ...], ...}
"""
res = {}
shuffle(teams)
for team_nr, team in enumerate(teams):
res["Team " + str(team_nr + 1)] = list(teams[team_nr])
return res
def printTeams(self, teams):
"""
debug function
......
......@@ -136,4 +136,3 @@ class Ui_Form(object):
self.btnExport.setText(_translate("Form", "Export"))
self.btnSave.setText(_translate("Form", "Uložit"))
 
import resources_rc
......@@ -168,4 +168,3 @@ class Ui_Form(object):
self.btnAddRequirement.setToolTip(_translate("Form", "Přidat omezení"))
self.btnDistribute.setText(_translate("Form", "Rozdělit"))
 
import resources_rc
......@@ -58,4 +58,3 @@ class Ui_Form(object):
self.label.setText(_translate("Form", "TextLabel"))
self.btnEdit.setToolTip(_translate("Form", "upravit"))
 
import resources_rc
......@@ -157,4 +157,3 @@ class Ui_Form(object):
self.btnExpandAll.setText(_translate("Form", "Rozbalit vše"))
self.tabWidget.setTabText(self.tabWidget.indexOf(self.tabDistributions), _translate("Form", "Historie"))
 
import resources_rc
......@@ -37,4 +37,3 @@ class Ui_Form(object):
Form.setWindowTitle(_translate("Form", "Form"))
self.btnCreateGroup.setText(_translate("Form", "Vytvořit skupinu"))
 
import resources_rc
......@@ -48,4 +48,3 @@ class Ui_MainWindow(object):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "Grou.py"))
 
import resources_rc
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment