Example #1
0
    def selectSubject(self):
        """
        Обработка выбора предмета из списка.
        :return: None.
        """
        select_subject = self.comboBoxSubjects.currentText()
        data = load_excel.load_table(
            filename=PATH_TO_DB_SCHOOL_SUBJECTS)['Данные']
        subject = list(
            filter(lambda item: item['Предмет'] == select_subject, data))[0]

        self.lineEditTitleSubject.setText(
            subject['Название предмета д.п.'].lower())
        self.lineEditDate.setText(
            date_to_rus_string.date_to_rus_string(subject['Дата']))
        self.lineEditLocation.setText(subject['Место проведения'])

        for i in range(len(self.lineEditCountPlayers)):
            if (subject[f'Шифр {self.numberClass[i]} класс'] != None):
                self.lineEditCountPlayers[i].setEnabled(True)
                self.lineEditPrefixes[i].setText(
                    subject[f'Шифр {self.numberClass[i]} класс'])
            else:
                self.lineEditCountPlayers[i].setEnabled(False)
                self.lineEditCountPlayers[i].setText('')
                self.lineEditPrefixes[i].setText('')
Example #2
0
    def clickedButtonMakeCertificate(self):
        """
        Событие: нажатие на кнопку "Сгенерировать".
        :return:
        """
        subject_title = self.comboBoxSubjects.currentText()
        data = load_excel.load_table(
            filename=PATH_TO_DB_SCHOOL_SUBJECTS)['Данные']
        data = list(
            filter(
                lambda it: it['Название предмета д.п.'].lower() ==
                subject_title, data))
        subject_title = data[0]['Название предмета д.п.']
        subject_title = subject_title[0:1].lower() + subject_title[1:]
        self.pushButtonMakeCertificate.setEnabled(False)
        (count, path) = logic_certificate.make_certificate(
            path_template=self.lineEditPathTemplate.text(),
            dir_out=self.lineEditDirOut.text(),
            filename=self.lineEditFilename.text(),
            subject_title=subject_title,
            path_peoples_input=os.path.abspath(
                self.lineEditPathPeoplesInput.text()))

        QMessageBox.about(
            self, 'Сертификаты сгенерированы!',
            f'Количество: {count}.\nПуть к файлу с сертификатами: {path}')
        self.pushButtonMakeCertificate.setEnabled(True)
Example #3
0
 def loadSubject(self):
     """
     Загрузка списка дней.
     :return: None.
     """
     data = load_excel.load_table(filename=PATH_TO_DB_SCHOOL_SUBJECTS)['Данные']
     data = sorted(data, key=lambda item: item['Дата'])
     date_min = datetime.datetime.today() - datetime.timedelta(2)
     data = list(filter(lambda item: item['Дата'] >= date_min, data))
     self.comboBoxSubjects.clear()
     self.comboBoxSubjects.addItems(list(map(lambda item: item['Предмет'], data)))
Example #4
0
 def loadSubject(self):
     """
     Загрузка списка дней.
     :return: None.
     """
     data = load_excel.load_table(filename=PATH_TO_DB_SCHOOL_SUBJECTS)['Данные']
     data = sorted(data, key=lambda item: item['Дата'])
     date_min = datetime.datetime.today() - datetime.timedelta(2)
     # data = list(filter(lambda item: item['Дата'] >= date_min, data))
     data = list(map(lambda item: item['Название предмета д.п.'], data))
     newData = []
     for subject in data:
         if (subject not in newData): newData.append(subject)
     self.comboBoxSubject.clear()
     self.comboBoxSubject.addItems(newData)
Example #5
0
def make_certificate(path_template, dir_out, filename, subject_title, path_peoples_input):
    table = load_excel.load_table(path_peoples_input)['Общий список']
    table = list(filter(lambda it: it['ФИО'] != None, table))
    count = 0
    template_document = ''
    for people in table:
        if (people['ФИО'] == None): break
        certificate = "\Certificate{%s}{%s}{%s}{%s}{%s}" % (
            subject_title,
            people['Класс'],
            people['ФИО'],
            people['Учебное заведение'],
            people['Муниципалитет']
        )
        template_document = certificate + '\n' + template_document
        count = count + 1

    return (count, make_pdf.make_pdf(path_template, dir_out, filename, {"%%{{template_document}}": template_document}))
Example #6
0
def load_peoples(filename, sheetnames):
    wb = load_workbook(filename=filename, read_only=True, data_only=True)

    sheetnames = sheetnames.split('$')
    sheetnames = list(map(lambda it: it.strip(), sheetnames))
    sheetnames = list(filter(lambda it: it != "", sheetnames))

    peoples = []
    for sheetname in sheetnames:
        ws = wb[sheetname]
        rows = tuple(ws.rows)

        i = find_head(rows)

        table = load_excel.load_table(filename, head_row=i)[sheetname]
        table = list(filter(lambda it: it['ФИО'] != None, table))
        table = list(filter(lambda it: it['Тип диплома'] != None, table))
        peoples.extend(list(map(lambda it: sheetname + ' ' + it['ФИО'], table)))

    return peoples
Example #7
0
def make_voucher(path_template, dir_out, filename, subject,
                 count_order_voucher, count_spare_voucher):
    # Проверка пути к шаблону.
    if not os.path.isfile(
            path_template) or os.path.splitext(path_template)[1] != '.tex':
        raise Exception('Некорректно задан путь к шаблону.')

    # Проверка пути к директории вывода.
    if not os.path.isdir(dir_out):
        raise Exception('Некорректно задана директория вывода.')

    # Проверка имени исходного файла.
    if filename.strip() == '':
        raise Exception('Некорректно задано имя файла.')

    # Формирование даты, которая будет печаться на талоне.
    data = load_excel.load_table(filename=PATH_TO_DB_SCHOOL_SUBJECTS)['Данные']
    data = list(filter(lambda item: item['Предмет'] == subject, data))
    if (len(data) != 1):
        raise Exception('Некорректно задан предмет.')
    date = date_to_rus_string.date_to_rus_string(data[0]['Дата']).upper()

    # Вычисление количество всех и запасных талонов.
    (count_all_voucher,
     count_calc_space_voucher) = calc_voucher(count_order_voucher,
                                              count_spare_voucher)
    count_page = count_all_voucher // VOUCHERS_IN_PAGE

    # Заполнение шаблона документа.
    template_value = {}
    template_value[
        '%%{{template_footer}}'] = f'Количество основных талоны: {count_order_voucher}. Количество запасных талонов: {count_calc_space_voucher}.'
    template_value['%%{{template_document}}'] = ('\\VoucherTable{' + date +
                                                 '}\n') * count_page

    # Генерация pdf.
    return make_pdf.make_pdf(path_template, dir_out, filename, template_value)
Example #8
0
def make_encryption_sheets(path_template, dir_out, filename, subject_title,
                           count_players):
    """
    Генерация шифровок.
    :param path_template: путь к файлу с шаблоном.
    :param dir_out: путь к директории вывода.
    :param filename: имя итоговой файла.
    :param subject_title: предмет.
    :param count_players: количество участников по классам.
    :return:
    """

    # Проверка пути к шаблону.
    if not os.path.isfile(
            path_template) or os.path.splitext(path_template)[1] != '.tex':
        raise Exception('Некорректно задан путь к шаблону.')

    # Проверка пути к директории вывода.
    if not os.path.isdir(dir_out):
        raise Exception('Некорректно задана директория вывода.')

    # Проверка имени итогового файла.
    if filename.strip() == '':
        raise Exception('Некорректно задано имя файла.')

    # Проверка корректности заданого предмета.
    data = load_excel.load_table(filename=PATH_TO_DB_SCHOOL_SUBJECTS)['Данные']
    data = list(filter(lambda item: item['Предмет'] == subject_title, data))
    if (len(data) != 1):
        raise Exception('Некорректно задан предмет.')
    else:
        subject = data[0]

    # Проверка, что количество учеников задано корректно.
    try:
        for key in count_players.keys():
            count_players[key] = int(count_players[key])
            if count_players[key] < 0:
                raise Exception()
    except Exception:
        raise Exception('Некорректно задано количество учеников.')

    codes = []

    p = {}
    for key in sorted(count_players.keys()):
        count = count_players[key]
        if count == 0: continue
        numbers = list(range(1, count + 1))
        if count >= 13:
            numbers.append(count + 1)
            numbers.remove(13)
            numbers.sort()

        prefix = subject[f'Шифр {key} класс']
        if (prefix == None) or (len(prefix) == 0):
            raise Exception('Заданы не существующие шифровки.')
        else:
            p[prefix] = p.get(prefix, 0) + count

    for prefix in p.keys():
        count = p[prefix]
        if count == 0: continue
        numbers = list(range(1, count + 1))
        if count >= 13:
            numbers.append(count + 1)
            numbers.remove(13)
            numbers.sort()
        codes.extend(
            list(map(lambda number: prefix + '-' + ("%02d" % number),
                     numbers)))

    if (len(codes) % 2 == 1): codes.append('Я лишняя!!!')

    title = subject['Название предмета д.п.']
    title = title[:1].lower() + title[1:]
    '\TwoEncryption{истории}{18 января 2019}{г. Красноярск}{РЯ11-19}{РЯ11-20}'
    temp = '\TwoEncryption{%s}{%s}{%s}{%%s}{%%s}\n' % (
        title, date_to_ru_string.date_to_rus_string(
            subject['Дата']), subject['Место проведения'])

    template_value = ''
    for i in range(0, len(codes) - 1, 2):
        template_value = template_value + (temp % (codes[i], codes[i + 1]))

    return make_pdf.make_pdf(path_template, dir_out, filename,
                             {'%%{{template_document}}': template_value})
Example #9
0
def make_diplom(filename, target, path_template, dir_out, filename_out, reg_number, number, subject):
    wb = load_workbook(filename=filename, read_only=True, data_only=True)

    peoples = []
    for sheetname in wb.sheetnames:
        ws = wb[sheetname]
        rows = tuple(ws.rows)

        i = find_head(rows)

        table = load_excel.load_table(filename, head_row=i)[sheetname]
        table = list(filter(lambda it: it['ФИО'] != None, table))
        table = list(filter(lambda it: it['Тип диплома'] != None, table))
        for k in range(len(table)):
            table[k]['Имя листа'] = sheetname
        peoples.extend(table)

    target = target.split("\n")
    target = list(map(lambda it: it.strip(), target))
    target = list(filter(lambda it: it != "", target))
    peoples = list(filter(lambda it: (it['Имя листа'] + " " + it['ФИО']) in target, peoples))

    data = load_excel.load_table(filename=PATH_TO_DB_SCHOOL_SUBJECTS)['Данные']
    data = list(filter(lambda item: item['Дата награждения'] != None, data))
    data = list(filter(lambda item: item['Название предмета д.п.'].lower() == subject.lower(), data))
    if len(data) != 1: raise Exception(11)
    sub = data[0]
    name = sub['Название предмета д.п.']
    name = name[0:1].lower() + name[1:]
    out = ""
    template_document_win = ''
    template_document_no_win = ''

    preview_win = []
    preview_no_win = []

    date = sub['Дата награждения']
    reg_number = int(reg_number)
    number = int(number)
    for people in peoples:
        if people['ФИО'] == 'Бит - Зая Георгий Александрович':
            fio = []
            fio.append('Бит - Зая')
            fio.append('Георгий')
            fio.append('Александрович')
        else:
            fio = people['ФИО'].split(' ')
            fio = list(filter(lambda it: it != "", fio))
            while (len(fio) < 3): fio.append('')

        school = people['Учебное заведение (полностью)']
        school = school.split("\n", 3)
        school = list(map(lambda it: it.strip(), school))
        school = list(map(lambda it: " ".join(it.split("\n")), school))
        school = list(filter(lambda it: it != "", school))
        school.append(people['Муниципалитет'])
        while (len(school) < 5): school.append("")

        num = "24 %s РЭ %06d" % (people['Тип диплома'][:2].upper(), number)
        diplom = "\Diplom" + "{%s}" * 16
        diplom = diplom % (
            name,
            fio[0],
            fio[1],
            " ".join(fio[2:]),
            people['Класс'],
            school[0],
            school[1],
            school[2],
            school[3],
            school[4],
            str(date.day),
            date_to_rus_string.month_to_rus_string(date),
            str(date.year % 100),
            sub['Место проведения'],
            num,
            str(reg_number)
        )
        preview_temp = "%s %s (%s класс, %s, %s)" % (
            fio[0], fio[1], people['Класс'], people['Учебное заведение'], people['Муниципалитет'])
        if people['Тип диплома'].lower() == "победитель":
            template_document_win += diplom + '\n'
            preview_win.append(preview_temp)
        else:
            template_document_no_win += diplom + '\n'
            preview_no_win.append(preview_temp)

        out_people = str(reg_number)
        out_people += '\t' + num
        out_people += '\t' + name
        out_people += '\t' + people['ФИО']
        out_people += '\t' + people['Учебное заведение'] + ", " + people['Муниципалитет'] + ", " + str(
            people['Класс']) + " кл."
        out += out_people + '\n'
        number += 1
        reg_number += 1

    make_pdf.make_pdf(path_template, dir_out, filename_out + " (победители)",
                      {"%%{{template_document}}": template_document_win})
    path = make_pdf.make_pdf(path_template, dir_out, filename_out + " (призёры)",
                             {"%%{{template_document}}": template_document_no_win})

    tt = sub['Название предмета д.п.']
    tt = tt[0].lower() + tt[1:]
    preview = ''
    preview += 'Победителями олимпиады по %s стали: %s' % (tt, ', '.join(preview_win))
    preview += '\n\n\n'
    preview += 'Дипломы призёров получили следующие участники: %s' % (', '.join(preview_no_win))
    return (out, path, preview)