Exemplo n.º 1
0
def prepare_data(root, semester, group_by: Type[_DBObject]):
    data = []
    year = None
    for user in root:
        user_name = user.short_name()
        lessons = Lesson.of(user)

        groups = set(group_by.of(user))

        for lesson in lessons:
            if (lesson.semester == semester or (isinstance(semester, (set, list)) and lesson.semester in semester)) \
                    and lesson.completed:
                year = lesson.date.year
                lesson_visitation = set(Visitation.of(lesson)) & set(Visitation.of(user))
                lesson_students = set(Student.of(lesson)) & set(Student.of(user))
                for item in list(set(group_by.of(lesson)) & groups):
                    data.append({
                        'user': user_name,
                        'visit': len(set(Visitation.of(item)) & lesson_visitation),
                        'total': len(set(Student.of(item)) & lesson_students),
                        'date': lesson.date,
                        'group_by': item.short_name(),
                        'day': lesson.date.timetuple().tm_yday,
                        'week': lesson.week
                    })
    return data, year
Exemplo n.º 2
0
    def __init__(self, file_name, group, discipline, session):
        file = xlrd.open_workbook(file_name)
        self.file = file.sheet_by_index(0)

        assert set([g.name for g in group]) == set(self.group_name())
        assert discipline.name.lower() == self.discipline_name().lower()

        lessons = lessons_of(group, discipline)
        year = sorted(lessons, key=lambda x: x.date)[0].date.year

        student_of_group = Student.of(group)

        for col in range(3, self.file.ncols):
            if self.file.cell(1, col).value in ['', None]:
                print((1, col), 'is None')
                break

            date = self.get_date(col, year)
            lesson = list(filter(lambda x: x.date == date, lessons))
            if len(lesson) == 0:
                continue
            lesson = lesson[0]

            for row in range(self.file.nrows):
                student = self.get_student(row, student_of_group)
                if student is None:
                    break
                print('new_visit', student, lesson)
                Visitation.get_or_create(session,
                                         student_id=student.id,
                                         lesson_id=lesson.id)
Exemplo n.º 3
0
 def user_start_lesson(self, status):
     students = Student.of(self.group.current())
     lesson = self.lesson.current()
     self.visit_marker = MarkVisitProcess(
         students, lesson, error_callback=self.lesson_finished.emit)
     self.visit_marker.new_visit.connect(self.table.new_visit)
     self.lesson_started.emit(lesson)
Exemplo n.º 4
0
 def check_groups(self, groups: List[Group]):
     for index, group in enumerate(groups):
         existing_group = self.session.query(Group).filter(
             Group.name == group.name).first()
         if existing_group is not None:
             students = Student.of(existing_group)
             if len(students) > 0:
                 self._apply_group(existing_group.name,
                                   existing_group.students)
Exemplo n.º 5
0
        def show_stats():
            visits = Visitation.of(lesson)
            students = Student.of(lesson)

            if lesson.completed:
                msg = f"Посетило {len(visits)} из {len(students)} ({round(len(visits) * 100 / (len(students)))}%)."
            else:
                msg = "Занятие не проведено."
            QMessageBox().information(
                self,
                "Статистика",
                msg
            )
Exemplo n.º 6
0
    def post(self, data: dict, auth: Auth, **kwargs):
        session = auth.session()

        group = session.query(Group).filter_by(**data,
                                               _is_deleted=False).first()
        if group is not None:
            students = Student.of(group)

            return {
                'name': group.name,
                'id': group.id,
                'students': sorted(students, key=lambda x: x.full_name())
            }
        else:
            raise NoDataError(f"группа с параметрами ({data}) не найдена")
Exemplo n.º 7
0
    def setData(self, lessons, groups):
        if groups is None or len(groups) == 0 or lessons is None or len(
                lessons) == 0:
            return

        students = sorted(Student.of(groups), key=lambda x: x.full_name())
        model = VisitModel(lessons, students)
        self.new_visit.connect(model.on_new_visit)
        self.lesson_start.connect(model.on_lesson_start)
        self.view.setModel(model)

        percent_vertical_model = PercentVerticalModel(lessons, students)
        percent_vertical_model.mimic(self.view.model())
        self.view_show_color_rate.connect(
            percent_vertical_model.view_show_color_rate)
        self.percent_vertical_view.setModel(percent_vertical_model)

        percent_horizontal_model = PercentHorizontalModel(lessons, students)
        percent_horizontal_model.mimic(self.view.model())
        self.percent_horizontal_view.setModel(percent_horizontal_model)

        model.item_changed.connect(percent_horizontal_model.data_updated)
        model.item_changed.connect(percent_vertical_model.data_updated)
        self.view.select_row.connect(model.select_row)
Exemplo n.º 8
0
 def _get_students(self, lesson_groups, groups):
     students = Student.of(lesson_groups)
     if groups is not None:
         students &= Student.of(groups)
     return students
Exemplo n.º 9
0
        item.setCheckState(Qt.Unchecked)
        item.setSizeHint(QSize(self.width(), 25))

    def setItems(self, items):
        for item in items:
            self.addItem(item)

    def clear(self):
        super().clear()
        self.setModel(QStandardItemModel(self))
        self.items = []
        if self.with_all:
            self.addItem('All')

    # def addItem(self, *__args):
    #     model: QStandardItemModel = self.model()
    #     model.appendRow()


if __name__ == '__main__':
    app = QApplication(sys.argv)

    widget = CheckableComboBox()
    for st in Student.of(Professor.get(id=1)):
        widget.addItem(st)

    widget.show()
    widget.checked.connect(lambda x: print(widget.current()))

    sys.exit(app.exec_())
Exemplo n.º 10
0
        percent_vertical_model = PercentVerticalModel(lessons, students)
        percent_vertical_model.mimic(self.view.model())
        self.view_show_color_rate.connect(
            percent_vertical_model.view_show_color_rate)
        self.percent_vertical_view.setModel(percent_vertical_model)

        percent_horizontal_model = PercentHorizontalModel(lessons, students)
        percent_horizontal_model.mimic(self.view.model())
        self.percent_horizontal_view.setModel(percent_horizontal_model)

        model.item_changed.connect(percent_horizontal_model.data_updated)
        model.item_changed.connect(percent_vertical_model.data_updated)
        self.view.select_row.connect(model.select_row)
        # self.view.select_row.connect(percent_vertical_model.select_row)


if __name__ == '__main__':
    app = QApplication(sys.argv)

    auth = Auth.log_in('VAE', '123456')
    group = Group.of(auth.user)[0]

    v = VisitTableWidget()
    v.setData(Lesson.of(group), Student.of(group))

    v.view.selectColumn(2)

    v.show()

    sys.exit(app.exec_())