Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Наработки для маркированной трассы со штрафными кругами #421

Merged
merged 9 commits into from
Dec 20, 2023

Conversation

alex-karpov
Copy link
Contributor

Мои наработки для маркировки со штрафными кругами (на пункте оценки печатается штраф, спортсмен проезжает требуемое количество штрафных кругов, отмечаясь на станции, может быть дисквалифицирован если проехал меньше, чем надо). Работу над проверкой маркировки параллельно вёл @sergeikobelev и его изменения попали в master. Соответственно, часть моих изменений перестали быть актуальными.

  • Настройки хронометража -> Штраф. Переключение настроек в активное / не активное состояние в зависимости от выбранных настроек
  • Настройки хронометража -> Штраф. Добавлены всплывающие подсказки (ToolTip) к некоторым настройкам
  • Добавлен ResultStatus.MISS_PENALTY_LAP (пп4.6.12.7 # не прошел назначенное число штрафных кругов)
  • check_penalty_laps() — проверка количества штрафных кругов. Сравнивает штраф на маркировке и количество отметок в штрафной станции
  • detach_penalty_laps(), detach_penalty_laps2() — разделение сплита на два массива: отметки на дистанции и отметки на станции на штрафном круге
  • Схема {checking() -> calculate_penalty() -> checking()} в нескольких местах: после первой проверки в сплит участника записываются отметки правильно / неправильно, по которым начисляется штраф; во второй проверке проверяется количество пройденных штрафных кругов
  • Печать штрафа на пункте оценки (номер / штраф) через win32print
  • 2_marked_route_penalty_A5.html — шаблон для печати штрафа на пункте оценки (номер / штраф) для термоленты 80мм
  • 3_marked_route_penalty_80mm.html — шаблон для печати штрафа на пункте оценки (номер / штраф) на бумаге A5 (лазерный принтер)
  • В шаблон для печати сплитов 1_split_printout.html добавлена печать штрафного времени и штрафных кругов.
  • test_penalty_checking.py — тесты для начисления штрафа
  • Существующие функции для начисления штрафа (penalty_calculation() и penalty_calculation_free_order()) не менял.

Тестами охвачена проверка штрафа на дистанции. Постарался рассмотреть как можно больше разных случаев. Сомнительные (с моей точки зрения) моменты выделил в test_non_obvious_behavior(). До тестов на проверку количества штрафных кругов не добрался. Для удобства отладки, к тестам добавил информационные сообщения на случай провала: вывод сплитов и курсов, сколько штрафа ожидается и сколько начислено.

Изменения Сергея Кобелева

Разработка велась в ветке work, параллельно с другими изменениями. Изменения влиты в master 13 июля. Пробую перечислить отдельные коммиты.

Modification of courses for marked route (Russian event type with deсision points)

7 марта

Добавлено диалоговое окно Подготовка к старту -> Изменение дистанций для маркировки — для создания курсов маркировки: 31 -> 31(31,131)

Check penalty legs visiting

7 марта, branch marked_route_lap_control

Добавлена функция marked_route_check_penalty_laps(). Считает количество отметок на станции на штрафном круге и сравнивает с начисленным штрафом. Отсутствует проверка, чтобы штрафные круги обязательно были в конце дистанции.

По всей видимости, предполагается, что за лишние отметки штраф начисляться не будет.

Смущает часть: if mr_if_counting_lap: count_laps = -1. Возможно, частный случай, когда отметка на штрафном круге совмещена с последним КП. Я обычно прошу, чтобы станцию отметки ставили в дальней части штрафного круга, тогда -1 не нужен.

Спортсмен снимается со статусом ResultStatus.MISSING_PUNCH (как и при обычной неправильной отметки на заданке) и с комментарием п.п.4.6.12.7 (не прошел назначенное число штрафных кругов).

Marked route reports

10 марта, branch marked_route_reports

Добавлены шаблоны:

  • 1_маркировка_с_изображением.html и 1_сплиты_маркировка_только_штраф.html — сплиты для маркировки
  • 2_маркировка_WO.html и 2_маркировка_номер_и_штраф.html — распечатки для пункта оценки: номер участника и штраф.
  • 9_официальный_протокол_штраф_круги_word.docx и 9_официальный_протокол_штраф_минуты_word.docx — шаблоны результатов для Word

Check result before penalty calculation. Prevent negative penalty (23:59:00 for -1)

23 марта, branch penalty_bug

Проверка штрафа перенесена после проверки правильности прохождения. Штраф не может быть отрицательным.

Disqualify people at file open / event change

23 марта, branch marked_route_dsq_on_file_open

Проверка штрафа и снятие спортсменов за не прохождение штрафных кругов происходит при старте спорторга.

Penalty calculation optimization on file open / import / event change

23 марта, branch penalty_calculation_optimization

Отменён предыдущий коммит, проверка штрафа происходит в другом месте.

New mode for time penalty - add penalty for extra controls

29 марта, branch penalty_for_extra_cp

!!! ветка не влита в master !!!

Добавлен режим начисления штрафа за лишние КП. Не знаю, как работает, не разбирался.

Изменено диалоговое окно Настройки хронометража -> Расчёт штрафа из сплитов. При разных комбинациях настроек другие настройки пропадают. С первого взгляда выглядит неудобно. Логичнее, чтобы оставались видны, но деактивировались, в своей версии сделал таким способом.

Version 1.6 release. Sum places - was inaccurate copy-pasted from sum scores. Word templates - new ranking places, macro for ranking replaced with direct realisation (Jinja2 works quite instable).

24 мая, branch penalty_laps_printout

Исправлена неточность при печати штрафа в распечатке через win32print.

penalty_laps_printout and some templates

24 мая

Не содержится изменений, связанных с маркировкой.

Печать штрафа и штрафных кругов в сплитах через win32print. Ветка интегрирована в master.

Эти ветки влиты в master, можно удалять: marked_route_dsq_on_file_open, penalty_calculation_optimization, penalty_bug, marked_route_reports, marked_route_lap_control. Эта ветка ещё не влита в master: penalty_for_extra_cp

Copy link
Member

@sergeikobelev sergeikobelev left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

В целом все супер! Проверил на разных базах, в целом все адекватно работает. Базы во вложении, вроде ничего конфиденциального в них нет.
Пара замечаний: настройки нужно починить, проверить, почему при переоткрытии базы многих снимает, остальное мелочи.
2023_11_17_marked_route_new.zip

languages/ru_RU/LC_MESSAGES/sportorg.po Outdated Show resolved Hide resolved
sportorg/gui/dialogs/result_edit.py Show resolved Hide resolved
sportorg/models/result/result_checker.py Outdated Show resolved Hide resolved
@sergeikobelev
Copy link
Member

В общем предлагаю ResultChecker.calculate_penalty() оставить только в одном месте - внутри ResultChecker.checking().
И мою проверку кругов убрать еще, в ней всех снимает.
image

+ '\n'
+ translate('Print number of penalty laps instead of splits')
+ '\n'
+ translate('when competitor reads out his card')
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Лучше использовать f строки вместо оператора +

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Также, кмк

Suggested change
+ translate('when competitor reads out his card')
+ translate('when a competitor reads out his card')

@@ -31,6 +31,19 @@ def date(value, fmt=None):
return dateutil.parser.parse(value).strftime(fmt)


def plural(value, fmt=None):
Copy link
Collaborator

@daxartio daxartio Dec 10, 2023

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

это что-то зависимая от языка. Я бы исключал такие функции в главном коде, в самих шаблонах еще можно


@staticmethod
def detach_penalty_laps2(splits, lap_station):
"""Walkaround: извлекает отметки на штрафной станции.
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Надо удалить коммент. Или написать на английском

@daxartio
Copy link
Collaborator

В общем, стоит удалить ru комменты из кода и функции сделать тож независимыми от языка или сделать в названии соответствующую пометку: например plural_ru

@daxartio daxartio merged commit 4ab5f11 into sportorg:master Dec 20, 2023
2 checks passed
@alex-karpov alex-karpov deleted the marked-route branch December 20, 2023 08:25
@alex-karpov alex-karpov restored the marked-route branch December 20, 2023 08:25
@alex-karpov alex-karpov deleted the marked-route branch December 20, 2023 08:25
alex-karpov added a commit to alex-karpov/pysport that referenced this pull request Dec 27, 2023
alex-karpov pushed a commit to alex-karpov/pysport that referenced this pull request Dec 29, 2023
commit 06102cc
Author: Sergei Kobelev <[email protected]>
Date:   Thu Dec 28 16:28:21 2023 +0500

    Ignore punches before start (for people who like to test start gates and my favorite triathlon organizers, who deliver activated SIACs through start/controls/finish) (sportorg#425)

commit 8d8435a
Author: Sergei Kobelev <[email protected]>
Date:   Wed Dec 20 13:10:15 2023 +0500

    feat: recovery features (sportorg#423)

commit 698011f
Author: Aleksandr Karpov <[email protected]>
Date:   Wed Dec 20 14:16:09 2023 +0700

    fix: shorter tab titles in the settings window (sportorg#424)

commit 4ab5f11
Author: Aleksandr Karpov <[email protected]>
Date:   Wed Dec 20 14:04:43 2023 +0700

    feat: new features for a marked track with penalty loops (sportorg#421)

    Co-authored-by: Aleksandr Karpov <[email protected]>
alex-karpov added a commit to alex-karpov/pysport that referenced this pull request Dec 30, 2023
feat: new features for a marked track with penalty loops (sportorg#421)

Co-authored-by: Aleksandr Karpov <[email protected]>

Squashed commit of the following:

commit 06102cc
Author: Sergei Kobelev <[email protected]>
Date:   Thu Dec 28 16:28:21 2023 +0500

    Ignore punches before start (for people who like to test start gates and my favorite triathlon organizers, who deliver activated SIACs through start/controls/finish) (sportorg#425)

commit 8d8435a
Author: Sergei Kobelev <[email protected]>
Date:   Wed Dec 20 13:10:15 2023 +0500

    feat: recovery features (sportorg#423)

commit 698011f
Author: Aleksandr Karpov <[email protected]>
Date:   Wed Dec 20 14:16:09 2023 +0700

    fix: shorter tab titles in the settings window (sportorg#424)

commit 4ab5f11
Author: Aleksandr Karpov <[email protected]>
Date:   Wed Dec 20 14:04:43 2023 +0700

    feat: new features for a marked track with penalty loops (sportorg#421)

    Co-authored-by: Aleksandr Karpov <[email protected]>

fix: remove unused changes
alex-karpov added a commit to alex-karpov/pysport that referenced this pull request Jul 29, 2024
feat: new features for a marked track with penalty loops (sportorg#421)

Co-authored-by: Aleksandr Karpov <[email protected]>

Squashed commit of the following:

commit 06102cc
Author: Sergei Kobelev <[email protected]>
Date:   Thu Dec 28 16:28:21 2023 +0500

    Ignore punches before start (for people who like to test start gates and my favorite triathlon organizers, who deliver activated SIACs through start/controls/finish) (sportorg#425)

commit 8d8435a
Author: Sergei Kobelev <[email protected]>
Date:   Wed Dec 20 13:10:15 2023 +0500

    feat: recovery features (sportorg#423)

commit 698011f
Author: Aleksandr Karpov <[email protected]>
Date:   Wed Dec 20 14:16:09 2023 +0700

    fix: shorter tab titles in the settings window (sportorg#424)

commit 4ab5f11
Author: Aleksandr Karpov <[email protected]>
Date:   Wed Dec 20 14:04:43 2023 +0700

    feat: new features for a marked track with penalty loops (sportorg#421)

    Co-authored-by: Aleksandr Karpov <[email protected]>

fix: remove unused changes
alex-karpov pushed a commit to alex-karpov/pysport that referenced this pull request Jul 29, 2024
commit 06102cc
Author: Sergei Kobelev <[email protected]>
Date:   Thu Dec 28 16:28:21 2023 +0500

    Ignore punches before start (for people who like to test start gates and my favorite triathlon organizers, who deliver activated SIACs through start/controls/finish) (sportorg#425)

commit 8d8435a
Author: Sergei Kobelev <[email protected]>
Date:   Wed Dec 20 13:10:15 2023 +0500

    feat: recovery features (sportorg#423)

commit 698011f
Author: Aleksandr Karpov <[email protected]>
Date:   Wed Dec 20 14:16:09 2023 +0700

    fix: shorter tab titles in the settings window (sportorg#424)

commit 4ab5f11
Author: Aleksandr Karpov <[email protected]>
Date:   Wed Dec 20 14:04:43 2023 +0700

    feat: new features for a marked track with penalty loops (sportorg#421)

    Co-authored-by: Aleksandr Karpov <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants