sportorg / pysport

Sportorg is a comprehensive software solution developed in Python that streamlines the organization and execution of orienteering competitions.
https://sportorg.readthedocs.io/ru/latest/
GNU General Public License v3.0
32 stars 16 forks source link

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

Closed alex-karpov closed 8 months ago

alex-karpov commented 9 months ago

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

Тестами охвачена проверка штрафа на дистанции. Постарался рассмотреть как можно больше разных случаев. Сомнительные (с моей точки зрения) моменты выделил в 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

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

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

sergeikobelev commented 9 months ago

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

daxartio commented 8 months ago

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