Skip to content

Commit

Permalink
Merge pull request #375 from sportorg/start_preparation_group_start
Browse files Browse the repository at this point in the history
Start preparation - several athletes on one minute.
  • Loading branch information
sergeikobelev committed Dec 30, 2019
2 parents 05921cd + ed919ce commit bf2dfa9
Show file tree
Hide file tree
Showing 3 changed files with 56 additions and 23 deletions.
3 changes: 3 additions & 0 deletions languages/ru_RU/LC_MESSAGES/sportorg.po
Original file line number Diff line number Diff line change
Expand Up @@ -1368,3 +1368,6 @@ msgstr "Ctrl+K - отправка выделенных участников"

msgid "Ctrl+K on groups - send start list"
msgstr "Ctrl+K на группах - отправка стартового протокола"

msgid "Several athletes on one minute"
msgstr "Несколько участников на 1 минуте"
50 changes: 34 additions & 16 deletions sportorg/gui/dialogs/start_preparation.py
Original file line number Diff line number Diff line change
Expand Up @@ -28,11 +28,11 @@ def setup_ui(self):
self.setWindowIcon(QtGui.QIcon(config.ICON))
self.setSizeGripEnabled(False)
self.setModal(True)
self.resize(639, 322)
self.resize(639, 352)
self.setFixedSize(self.size())

self.button_box = QtWidgets.QDialogButtonBox(self)
self.button_box.setGeometry(QtCore.QRect(40, 280, 341, 32))
self.button_box.setGeometry(QtCore.QRect(40, 310, 341, 32))
self.button_box.setOrientation(QtCore.Qt.Horizontal)
self.button_box.setStandardButtons(QtWidgets.QDialogButtonBox.Cancel | QtWidgets.QDialogButtonBox.Ok)

Expand Down Expand Up @@ -89,9 +89,9 @@ def setup_ui(self):
self.draw_check_box.stateChanged.connect(self.draw_activate)

self.start_group_box = QtWidgets.QGroupBox(self)
self.start_group_box.setGeometry(QtCore.QRect(8, 120, 311, 121))
self.start_group_box.setGeometry(QtCore.QRect(8, 120, 311, 151))
self.widget_start = QtWidgets.QWidget(self.start_group_box)
self.widget_start.setGeometry(QtCore.QRect(18, 16, 256, 94))
self.widget_start.setGeometry(QtCore.QRect(18, 16, 256, 124))
self.start_layout = QtWidgets.QFormLayout(self.widget_start)
self.start_layout.setContentsMargins(0, 0, 0, 0)
self.start_check_box = QtWidgets.QCheckBox(self.widget_start)
Expand All @@ -109,14 +109,20 @@ def setup_ui(self):
self.start_interval_time_edit.setEnabled(False)
self.start_interval_time_edit.setDisplayFormat(self.time_format)
self.start_layout.setWidget(2, QtWidgets.QFormLayout.FieldRole, self.start_interval_time_edit)
self.start_group_settings_radion_button = QtWidgets.QRadioButton(self.widget_start)
self.start_group_settings_radion_button.setEnabled(False)
self.start_group_settings_radion_button.setChecked(False)
self.start_layout.setWidget(3, QtWidgets.QFormLayout.SpanningRole, self.start_group_settings_radion_button)
self.start_group_settings_radio_button = QtWidgets.QRadioButton(self.widget_start)
self.start_group_settings_radio_button.setEnabled(False)
self.start_group_settings_radio_button.setChecked(False)
self.start_layout.setWidget(3, QtWidgets.QFormLayout.SpanningRole, self.start_group_settings_radio_button)
self.start_one_minute_qty_label = QtWidgets.QLabel(self.widget_start)
self.start_layout.setWidget(4, QtWidgets.QFormLayout.LabelRole, self.start_one_minute_qty_label)
self.start_one_minute_qty = QtWidgets.QSpinBox(self.widget_start)
self.start_one_minute_qty.setValue(1)
self.start_one_minute_qty.setMaximum(100)
self.start_layout.setWidget(4, QtWidgets.QFormLayout.FieldRole, self.start_one_minute_qty)
self.start_check_box.stateChanged.connect(self.start_activate)

self.numbers_group_box = QtWidgets.QGroupBox(self)
self.numbers_group_box.setGeometry(QtCore.QRect(322, 120, 311, 121))
self.numbers_group_box.setGeometry(QtCore.QRect(322, 120, 311, 151))
self.widget_numbers = QtWidgets.QWidget(self.numbers_group_box)
self.widget_numbers.setGeometry(QtCore.QRect(18, 16, 256, 94))
self.numbers_vert_layout = QtWidgets.QVBoxLayout(self.widget_numbers)
Expand Down Expand Up @@ -159,7 +165,7 @@ def setup_ui(self):
self.numbers_interval_radio_button.raise_()

self.progress_bar = QtWidgets.QProgressBar(self)
self.progress_bar.setGeometry(QtCore.QRect(10, 250, 621, 23))
self.progress_bar.setGeometry(QtCore.QRect(10, 280, 621, 23))
self.progress_bar.setProperty("value", 0)

self.button_box.raise_()
Expand Down Expand Up @@ -193,7 +199,8 @@ def retranslate_ui(self):
self.start_check_box.setText(_("Change start time"))
self.start_first_label.setText(_("First start in corridor"))
self.start_interval_radio_button.setText(_("Fixed start interval"))
self.start_group_settings_radion_button.setText(_("Take start interval from group settings"))
self.start_group_settings_radio_button.setText(_("Take start interval from group settings"))
self.start_one_minute_qty_label.setText(_("Several athletes on one minute"))
self.numbers_group_box.setTitle(_("Start numbers"))
self.numbers_check_box.setText(_("Change start numbers"))
self.numbers_interval_radio_button.setText(_("First number"))
Expand All @@ -217,10 +224,13 @@ def number_activate(self):

def start_activate(self):
status = self.start_check_box.isChecked()
self.start_first_label.setEnabled(status)
self.start_first_time_edit.setEnabled(status)
self.start_group_settings_radion_button.setEnabled(status)
self.start_group_settings_radio_button.setEnabled(status)
self.start_interval_radio_button.setEnabled(status)
self.start_interval_time_edit.setEnabled(status)
self.start_one_minute_qty_label.setEnabled(status)
self.start_one_minute_qty.setEnabled(status)

def draw_activate(self):
status = self.draw_check_box.isChecked()
Expand Down Expand Up @@ -259,11 +269,13 @@ def accept(self, *args, **kwargs):

corridor_first_start = time_to_otime(self.start_first_time_edit.time())
fixed_start_interval = time_to_otime(self.start_interval_time_edit.time())
one_minute_qty = self.start_one_minute_qty.value()
if self.start_interval_radio_button.isChecked():
StartTimeManager(obj).process(corridor_first_start, False, fixed_start_interval, mix_groups=mix_groups)
StartTimeManager(obj).process(corridor_first_start, False, fixed_start_interval, one_minute_qty,
mix_groups=mix_groups)

if self.start_group_settings_radion_button.isChecked():
StartTimeManager(obj).process(corridor_first_start, True, fixed_start_interval)
if self.start_group_settings_radio_button.isChecked():
StartTimeManager(obj).process(corridor_first_start, True, fixed_start_interval, one_minute_qty)

self.progress_bar.setValue(75)
sleep(progressbar_delay)
Expand Down Expand Up @@ -302,6 +314,7 @@ def save_state(self):
obj.set_setting('is_fixed_start_interval', self.start_interval_radio_button.isChecked())
obj.set_setting('start_interval', time_to_otime(self.start_interval_time_edit.time()).to_msec())
obj.set_setting('start_first_time', time_to_otime(self.start_first_time_edit.time()).to_msec())
obj.set_setting('start_one_minute_qty', self.start_one_minute_qty.value())

obj.set_setting('is_start_preparation_numbers', self.numbers_check_box.isChecked())
obj.set_setting('is_fixed_number_interval', self.numbers_interval_radio_button.isChecked())
Expand Down Expand Up @@ -329,11 +342,12 @@ def recover_state(self):
if obj.get_setting('is_fixed_start_interval', True):
self.start_interval_radio_button.setChecked(True)
else:
self.start_group_settings_radion_button.setChecked(True)
self.start_group_settings_radio_button.setChecked(True)
t = OTime(msec=obj.get_setting('start_interval', 60000))
self.start_interval_time_edit.setTime(QTime(t.hour, t.minute, t.sec))
t = OTime(msec=obj.get_setting('start_first_time', 60000))
self.start_first_time_edit.setTime(QTime(t.hour, t.minute, t.sec))
self.start_one_minute_qty.setValue(obj.get_setting('start_one_minute_qty', 1))

self.numbers_check_box.setChecked(obj.get_setting('is_start_preparation_numbers', False))
if obj.get_setting('is_fixed_number_interval', True):
Expand All @@ -345,6 +359,10 @@ def recover_state(self):
self.numbers_interval_spin_box.setValue(obj.get_setting('numbers_interval', 1))
self.numbers_first_spin_box.setValue(obj.get_setting('numbers_first', 1))

self.draw_activate()
self.number_activate()
self.start_activate()
self.reserve_activate()

def guess_courses_for_groups():
obj = race()
Expand Down
26 changes: 19 additions & 7 deletions sportorg/models/start/start_preparation.py
Original file line number Diff line number Diff line change
Expand Up @@ -294,7 +294,8 @@ def __init__(self, r):
Set new start time for athletes
"""
def process(self, corridor_first_start, is_group_start_interval, fixed_start_interval=None, mix_groups=False):
def process(self, corridor_first_start, is_group_start_interval, fixed_start_interval=None, one_minute_qty=1,
mix_groups=False):
current_race = self.race
current_race.update_counters()

Expand All @@ -303,7 +304,7 @@ def process(self, corridor_first_start, is_group_start_interval, fixed_start_int
cur_start = corridor_first_start

if mix_groups:
self.process_corridor(cur_corridor, cur_start, fixed_start_interval)
self.process_corridor(cur_corridor, cur_start, fixed_start_interval, one_minute_qty)
else:
groups = get_groups_by_corridor(cur_corridor)
for cur_group in groups:
Expand All @@ -315,26 +316,37 @@ def process(self, corridor_first_start, is_group_start_interval, fixed_start_int
if cur_group.start_interval is not None:
start_interval = cur_group.start_interval

cur_start = self.process_group(cur_group, cur_start, start_interval)
cur_start = self.process_group(cur_group, cur_start, start_interval, one_minute_qty)

def process_group(self, group, first_start, start_interval):
def process_group(self, group, first_start, start_interval, one_minute_qty):
current_race = self.race
persons = current_race.get_persons_by_group(group)
current_start = first_start
one_minute_count = 0
if persons is not None:
for current_person in persons:
current_person.start_time = current_start
current_start = current_start + start_interval
one_minute_count += 1
if one_minute_count >= one_minute_qty:
current_start = current_start + start_interval
one_minute_count = 0

if one_minute_count > 0:
current_start = current_start + start_interval
return current_start

def process_corridor(self, corridor, first_start, start_interval):
def process_corridor(self, corridor, first_start, start_interval, one_minute_qty):
current_race = self.race
persons = current_race.get_persons_by_corridor(corridor)
if persons is not None:
current_start = first_start
one_minute_count = 0
for current_person in persons:
current_person.start_time = current_start
current_start = current_start + start_interval
one_minute_count += 1
if one_minute_count >= one_minute_qty:
current_start = current_start + start_interval
one_minute_count = 0


def get_corridors():
Expand Down

0 comments on commit bf2dfa9

Please sign in to comment.