Esempio n. 1
0
 def course_double_clicked(index):
     try:
         if index.row() < len(race().courses):
             dialog = CourseEditDialog(race().courses[index.row()])
             dialog.exec()
     except Exception as e:
         logging.error(str(e))
Esempio n. 2
0
    def show_person_info(self):
        bib_or_name = self.item_bib_or_name.text()  # type: str
        self.label_person_info.setText('')
        person = None
        if bib_or_name:
            if bib_or_name.isdigit():
                person = memory.find(memory.race().persons,
                                     bib=int(bib_or_name))
            else:
                for p in memory.race().persons:
                    if bib_or_name.lower() in p.full_name.lower():
                        person = p
                        break

            if person:
                info = person.full_name
                if person.group:
                    info = '{}\n{}: {}'.format(info, _('Group'),
                                               person.group.name)
                if person.card_number:
                    info = '{}\n{}: {}'.format(info, _('Card'),
                                               person.card_number)
                self.label_person_info.setText(info)
            else:
                self.label_person_info.setText(_('not found'))
        self.tmp_person = person
Esempio n. 3
0
    def calculate_penalty(result):
        assert isinstance(result, Result)
        mode = race().get_setting('marked_route_mode', 'off')
        if mode == 'off':
            return

        person = result.person

        if person is None:
            return
        if person.group is None:
            return

        course = race().find_course(result)
        if not course:
            return

        controls = course.controls

        penalty = ResultChecker.penalty_calculation(result.splits,
                                                    controls,
                                                    check_existence=True)

        if race().get_setting('marked_route_max_penalty_by_cp', False):
            # limit the penalty by quantity of controls
            penalty = min(len(controls), penalty)

        if mode == 'laps':
            result.penalty_laps = penalty
        elif mode == 'time':
            time_for_one_penalty = OTime(
                msec=race().get_setting('marked_route_penalty_time', 60000))
            result.penalty_time = time_for_one_penalty * penalty
Esempio n. 4
0
 def apply_changes_impl(self):
     status_comment = StatusComments().remove_hint(
         self.item_status_comment.currentText())
     text = self.item_numbers.toPlainText()
     numbers = []
     for item in text.split('\n'):
         if not len(item):
             continue
         for n_item in item.split():
             if n_item.isdigit():
                 numbers.append(int(n_item))
     old_numbers = []
     obj = race()
     for number in numbers:
         if number not in old_numbers:
             person = find(obj.persons, bib=number)
             if person:
                 result = race().new_result(ResultManual)
                 result.person = person
                 result.status = ResultStatus.DID_NOT_START
                 result.status_comment = status_comment
                 Teamwork().send(result.to_dict())
                 obj.add_new_result(result)
             else:
                 logging.info('{} not found'.format(number))
             old_numbers.append(number)
Esempio n. 5
0
 def group_double_clicked(index):
     try:
         if index.row() < len(race().groups):
             dialog = GroupEditDialog(race().groups[index.row()])
             dialog.exec()
     except Exception as e:
         logging.error(str(e))
Esempio n. 6
0
    def apply_changes_impl(self):
        org = self.current_object
        assert (isinstance(org, Organization))
        if self.is_new:
            race().organizations.insert(0, org)

        if org.name != self.item_name.text():
            org.name = self.item_name.text()

        if org.address.country.name != self.item_country.currentText():
            org.address.country.name = self.item_country.currentText()

        if org.address.state != self.item_region.currentText():
            org.address.state = self.item_region.currentText()

        if org.address.city != self.item_city.text():
            org.address.city = self.item_city.text()

        if org.address.street != self.item_address.text():
            org.address.street = self.item_address.text()

        if org.contact.value != self.item_contact.text():
            org.contact.value = self.item_contact.text()
            org.contact.name = 'phone'

        GlobalAccess().get_main_window().refresh()
        Teamwork().send(org.to_dict())
Esempio n. 7
0
 def execute(self):
     result = race().new_result()
     race().add_new_result(result)
     Teamwork().send(result.to_dict())
     logging.info('SPORTident result')
     self.app.get_result_table().model().init_cache()
     self.app.refresh()
Esempio n. 8
0
 def teamwork(self, command):
     try:
         race().update_data(command.data)
         logging.info(repr(command.data))
         self.refresh()
     except Exception as e:
         logging.error(str(e))
Esempio n. 9
0
    def apply_changes_impl(self):
        obj = race()

        start_date = self.item_start_date.dateTime().toPython()
        end_date = self.item_end_date.dateTime().toPython()

        obj.data.title = self.item_main_title.text()
        obj.data.description = self.item_sub_title.toPlainText()
        obj.data.description = obj.data.description.replace('\n', '<br>\n')
        obj.data.location = self.item_location.text()
        obj.data.url = self.item_url.text()
        obj.data.chief_referee = self.item_refery.text()
        obj.data.secretary = self.item_secretary.text()
        obj.data.start_datetime = start_date
        obj.data.end_datetime = end_date

        t = RaceType.get_by_name(self.item_type.currentText())
        if t is not None:
            obj.data.race_type = t
        obj.data.relay_leg_count = self.item_relay_legs.value()

        obj.set_setting('system_zero_time',
                        (start_date.hour, start_date.minute, 0))

        ResultCalculation(race()).process_results()
        GlobalAccess().get_main_window().set_title()
Esempio n. 10
0
    def check_result(self, result):
        if self.person is None:
            return True
        if self.person.group is None:
            return True

        if race().get_setting('result_processing_mode', 'time') == 'scores':
            # process by score (rogain)
            result.scores = self.calculate_scores_rogain(result)
            return True

        if race().get_setting('marked_route_dont_dsq', False):
            # mode: competition without disqualification for mispunching (add penalty for missing cp)
            return True

        course = race().find_course(result)

        if course is None:
            if self.person.group.is_any_course:
                return False
            return True

        if self.person.group.is_any_course:
            return True

        return result.check(course)
Esempio n. 11
0
 def __init__(self, result: ResultSportident):
     assert result, Result
     self._result = result
     self._person = None
     self.assign_chip_reading = race().get_setting('system_assign_chip_reading', 'off')
     self.duplicate_chip_processing = race().get_setting('system_duplicate_chip_processing', 'several_results')
     self.card_read_repeated = self.duplicate_chip_processing == 'bib_request'
Esempio n. 12
0
 def team_double_clicked(index):
     try:
         if index.row() < len(race().organizations):
             dialog = OrganizationEditDialog(
                 race().organizations[index.row()])
             dialog.exec()
     except Exception as e:
         logging.error(str(e))
Esempio n. 13
0
 def double_clicked(self, index):
     try:
         logging.debug('Clicked on ' + str(index.row()))
         if index.row() < len(race().results):
             dialog = ResultEditDialog(race().results[index.row()])
             dialog.exec()
     except Exception as e:
         logging.error(str(e))
Esempio n. 14
0
 def group_double_clicked(index):
     try:
         if index.row() < len(race().groups):
             dialog = GroupEditDialog(race().groups[index.row()])
             dialog.exec_()
             GlobalAccess().get_main_window().refresh()
     except Exception as e:
         logging.error(str(e))
Esempio n. 15
0
 def entry_double_clicked(index):
     # show_edit_dialog(index)
     try:
         if index.row() < len(race().persons):
             dialog = EntryEditDialog(race().persons[index.row()])
             dialog.exec()
     except Exception as e:
         logging.error(str(e))
Esempio n. 16
0
 def execute(self):
     logging.debug('Penalty removing start')
     for result in race().results:
         result.penalty_time = OTime(msec=0)
         result.penalty_laps = 0
     logging.debug('Penalty removing finish')
     ResultCalculation(race()).process_results()
     self.app.refresh()
Esempio n. 17
0
 def execute(self):
     logging.debug('Penalty calculation start')
     for result in race().results:
         if result.person is not None:
             ResultChecker.calculate_penalty(result)
     logging.debug('Penalty calculation finish')
     ResultCalculation(race()).process_results()
     self.app.refresh()
Esempio n. 18
0
 def execute(self):
     result = race().new_result(ResultManual)
     Teamwork().send(result.to_dict())
     race().add_new_result(result)
     logging.info(_('Manual finish'))
     self.app.get_result_table().model().init_cache()
     self.app.refresh()
     self.app.auto_save()
Esempio n. 19
0
    def _create_person(self):
        new_person = Person()
        new_person.bib = self._get_max_bib() + 1
        new_person.surname = _('Competitor') + ' #' + str(new_person.bib)
        new_person.group = self._find_group_by_punches()
        self._result.person = new_person

        race().persons.append(new_person)
Esempio n. 20
0
 def execute(self):
     host = race().get_setting('teamwork_host', 'localhost')
     port = race().get_setting('teamwork_port', 50010)
     token = race().get_setting('teamwork_token', str(uuid.uuid4())[:8])
     connection_type = race().get_setting('teamwork_type_connection', 'client')
     Teamwork().set_options(host, port, token, connection_type)
     Teamwork().toggle()
     time.sleep(0.5)
     self.app.interval()
Esempio n. 21
0
    def _find_group_by_punches(self):
        for i in race().groups:
            if i.course:
                if self._result.check(i.course):
                    return i

        if len(race().groups) > 0:
            return race().groups[0]

        return None
Esempio n. 22
0
 def double_clicked(self, index):
     try:
         logging.debug('Clicked on ' + str(index.row()))
         if index.row() < len(race().results):
             dialog = ResultEditDialog(race().results[index.row()])
             dialog.exec_()
             GlobalAccess().get_main_window().refresh()
             # self.selectRow(index.row()+1)
     except Exception as e:
         logging.error(str(e))
Esempio n. 23
0
    def apply_changes_impl(self):
        org = self.current_object
        assert (isinstance(org, Organization))
        if self.is_new:
            race().organizations.insert(0, org)

        org.name = self.item_name.text()
        org.code = self.item_code.text()
        org.country = self.item_country.currentText()
        org.region = self.item_region.currentText()
        org.contact = self.item_contact.text()

        Teamwork().send(org.to_dict())
Esempio n. 24
0
 def teamwork(self, command):
     try:
         race().update_data(command.data)
         logging.info(repr(command.data))
         if 'object' in command.data and command.data['object'] in [
                 'ResultManual', 'ResultSportident', 'ResultSFR',
                 'ResultSportiduino'
         ]:
             ResultCalculation(race()).process_results()
         Broker().produce('teamwork_recieving', command.data)
         self.refresh()
     except Exception as e:
         logging.error(str(e))
Esempio n. 25
0
    def get_data(person, result=None):
        assert person, Person
        data = {
            'id': str(person.id),
            'ref_id': str(person.id),
            'bib': person.bib,
            'group_name': person.group.name if person.group else '',
            'name': person.full_name,
            'organization':
            person.organization.name if person.organization else '',
            # 'country_code': 'RUS',
            'card_number': person.card_number,
            'national_code': None,
            'world_code': None,
            'out_of_competition': person.is_out_of_competition,
            'start': person.start_time.to_sec() if person.start_time else 0
        }

        if race().is_relay():
            # send relay fields only for relay events (requested by Ivan Churakoff)
            data['relay_team'] = person.bib % 1000
            data['lap'] = max(person.bib // 1000, 1)

        if result is not None:
            assert result, Result
            data['start'] = result.get_start_time().to_sec()
            data['result_ms'] = round(result.get_result_otime().to_msec() /
                                      10)  # 1/100 sec - proprietary format
            data['result_status'] = str(result.status)
            if len(result.splits):
                data['splits'] = []
                splits = race().get_course_splits(result)
                for i in range(len(splits)):
                    """
                    Orgeo Splits format: 
                    Option 	Type 	Description
                    code 	string 	CP code
                    time 	int 	seconds of current split - time from previous CP to this CP
                    """
                    current_split = {}
                    current_split['code'] = splits[i].code
                    end_time = splits[i].time
                    if i > 0:
                        start_time = splits[i - 1].time
                    else:
                        start_time = result.get_start_time()
                    current_split['time'] = (end_time - start_time).to_sec()
                    data['splits'].append(current_split)

        return data
Esempio n. 26
0
 def check_name(self):
     name = self.item_name.text()
     self.button_ok.setDisabled(False)
     if name and name != self.current_object.name:
         org = find(race().organizations, name=name)
         if org:
             self.button_ok.setDisabled(True)
Esempio n. 27
0
 def get_options():
     obj = race()
     return BotOption(obj.get_setting('telegram_token', ''),
                      obj.get_setting('telegram_chat_id', ''),
                      obj.get_setting('telegram_template', ''),
                      obj.get_setting('telegram_parse_mode', ''),
                      obj.get_setting('telegram_enabled', False))
Esempio n. 28
0
    def set_values(self):
        obj = race()
        default_printer_name = QPrinter().printerName()
        printer_name = Config().printer.get('main', default_printer_name)
        # try:
        #     QPrinter().setPrinterName(printer_name)
        # except Exception as e:
        #     printer_name = default_printer_name
        self.selected_printer.setText(printer_name)

        printer_name = Config().printer.get('split', default_printer_name)
        # try:
        #     QPrinter().setPrinterName(printer_name)
        # except Exception as e:
        #     logging.error(str(e))
        #     printer_name = default_printer_name
        self.selected_split_printer.setText(printer_name)

        self.print_splits_checkbox.setChecked(obj.get_setting('split_printout', False))

        template = obj.get_setting('split_template')
        if template:
            self.item_template.setCurrentText(template)

        self.item_margin_left.setValue(obj.get_setting('print_margin_left', 5.0))
        self.item_margin_top.setValue(obj.get_setting('print_margin_top', 5.0))
        self.item_margin_right.setValue(obj.get_setting('print_margin_right', 5.0))
        self.item_margin_bottom.setValue(obj.get_setting('print_margin_bottom', 5.0))
Esempio n. 29
0
 def _has_result(self):
     for result in race().results:
         if result is None:
             continue
         if self._compare_result(result):
             return True
     return False
Esempio n. 30
0
 def _has_sportident_card(self):
     for result in race().results:
         if result is None:
             continue
         if result.card_number == self._result.card_number:
             return True
     return False