Exemple #1
0
def squad_stats(request, squad_code="1701"):
    try:
        if "to" in request.GET:
            to_date = datetime.strptime(request.GET.get("to"), "%d-%m-%Y")
        else:
            to_date = date.today()
        if "from" in request.GET:
            from_date = datetime.strptime(request.GET.get("from"), "%d-%m-%Y")
        else:
            from_date = to_date - timedelta(days=30)
    except:
        context = {"error": "Неправильный формат даты", "squad_code": squad_code}
        return render(request, "journal/squad_stats.html", with_context(context))
    squad = Squad.objects.get(code=squad_code)
    students = Student.objects.filter(squad=squad).order_by("unit", "last_name")
    subjects = Subject.objects.filter(timetable__squad__code=squad_code)

    return render(
        request,
        "journal/squad_stats.html",
        with_context(
            {
                "subjects": subjects,
                "unit_rows": _make_unit_rows(students, subjects, from_date, to_date),
                "total": _make_squad_total(students, subjects, from_date, to_date),
                "units": _get_units_marks(students, subjects, from_date, to_date),
                "from_date": from_date,
                "to_date": to_date,
                "squad_code": squad_code,
            }
        ),
    )
Exemple #2
0
def edit_attendance(request, attendance_id):
    att: Attendance = Attendance.objects.filter(id=attendance_id)[0]
    context = {}
    ext = get_user_extension(request.user)
    if ext:
        if not ext.can_edit_attendance:
            context = {"error": "Этот пользователь не может изменять строевые записки"}
        elif ext.date_limit and att.date != date.today():
            context = {
                "error": "Этот пользователь не может изменять строевые записки за даты, отличающейся от текущей"
            }

    types = constants.ATT_TYPES
    if not context:
        context = {
            "students": att.students.all()
            .order_by("student__last_name")
            .prefetch_related("student"),
            "statuses": att.students.all()
            .order_by("student__last_name")
            .prefetch_related("student"),
            "attendance_types": types,
            "attendance_id": attendance_id,
            "squad_code": att.squad.code,
            "date": att.date,
        }

    return render(request, "journal/attendance_edit.html", with_context(context))
Exemple #3
0
def marks_squad(request, squad_code="1702", subject_id=1):
    subj = Subject.objects.filter(id=subject_id).first()
    y_keys = students_to_keys(Student.objects.filter(squad__code=squad_code))
    x_keys = lessons_to_keys(
        Lesson.objects.filter(attendance__squad__code=squad_code,
                              subject_id=subject_id))
    marks = marks_to_keys(
        Mark.objects.filter(student__squad__code=squad_code,
                            lesson__subject_id=subject_id))
    header, cells = make_cells(x_keys, y_keys, marks)
    squad = Squad.objects.filter(code=squad_code).first()

    att = Attendance.objects.filter(squad=squad).order_by('-date')

    exams = Exam.objects.filter(subject_id=subject_id, squad=squad)
    print(exams)

    return render(
        request, "journal/marks/marks_squad.html",
        with_context({
            "squad_code": squad_code,
            "header": header,
            "cells": cells,
            "marks": marks,
            "subject": subj,
            "x_keys": x_keys,
            "y_keys": y_keys,
            "subject_id": subject_id,
            "attendance_list": att,
            "exam_list": exams,
        }))
Exemple #4
0
def add_attendance(request):
    if request.method == 'POST':
        form = NewAttendanceForm(request.POST)
        squad_code = form.data["squad_code"]
        date = form.data.get("date")
        date_str = dt.datetime.strptime(date, '%d-%m-%Y')
        # todo constants
        present = constants.ATTENDANCE_TYPE_PRESENT

        squad = Squad.objects.filter(code=squad_code)[0]
        att = Attendance(
            date=date_str,
            squad=squad,
        )
        try:
            att.save()
        except IntegrityError:
            return render(
                request, "journal/attendance.html",
                with_context({
                    "error":
                    f"Для взвода {squad_code} уже существует строевая записка на {date_str}"
                }))

        students = Student.objects.filter(squad_id=squad.id)
        for student in students:
            val = StudentAttendance(student=student, value=present.value)
            val.save()
            att.students.add(val)
            pass

    return HttpResponseRedirect(request.META.get('HTTP_REFERER', '/'))
Exemple #5
0
def attendance(request):
    f = Attendance.objects.all()

    return render(request, "journal/attendance.html",
                  with_context({
                      "forms": f,
                  }))
Exemple #6
0
def students(request):
    ls: [Student] = Student.objects.all()
    return render(
        request,
        "journal/students.html",
        with_context({
            # "user_id": user_id,
            "students": ls,
        }))
Exemple #7
0
def index(request):
    name = "boris"
    if request.GET.get('mybtn'):
        name = str(request.GET.get('mytextbox'))

    return render(
        request,
        "journal/index.html",
        with_context({
            "user": name
        })
    )
Exemple #8
0
def squad_stats(request, squad_code='1701'):
    try:
        if 'to' in request.GET:
            to_date = datetime.strptime(request.GET.get('to'), '%d-%m-%Y')
        else:
            to_date = date.today()
        if 'from' in request.GET:
            from_date = datetime.strptime(request.GET.get('from'), '%d-%m-%Y')
        else:
            from_date = to_date - timedelta(days=30)
    except:
        context = {
            "error": "Неправильный формат даты",
            'squad_code': squad_code
        }
        return render(request, "journal/squad_stats.html",
                      with_context(context))
    squad = Squad.objects.get(code=squad_code)
    students = Student.objects.filter(squad=squad).order_by(
        'unit', 'last_name')
    subjects = Subject.objects.filter(timetable__squad__code=squad_code)

    return render(
        request, "journal/squad_stats.html",
        with_context({
            'subjects':
            subjects,
            'unit_rows':
            _make_unit_rows(students, subjects, from_date, to_date),
            'total':
            _make_squad_total(students, subjects, from_date, to_date),
            'units':
            _get_units_marks(students, subjects, from_date, to_date),
            'from_date':
            from_date,
            'to_date':
            to_date,
            'squad_code':
            squad_code
        }))
Exemple #9
0
def squad_stats(request, squad_code='1701'):
    squad = Squad.objects.get(code=squad_code)
    students = Student.objects.filter(squad=squad).order_by(
        'unit', 'last_name')
    subjects = Subject.objects.filter(curriculum__squad=squad)

    return render(
        request, "journal/squad_stats.html",
        with_context({
            'subjects': subjects,
            'unit_rows': _make_unit_rows(students, subjects),
            'total': _make_squad_total(students, subjects),
            'units': _get_units_marks(students, subjects),
        }))
Exemple #10
0
def students(request):
    ls: [Student] = Student.objects.all()
    for student in ls:
        student_info = PersonalInfo.objects.filter(student=student)
        if student_info:
            student.deducted = student_info[0].end_date is not None
        else:
            student.deducted = False
    return render(
        request,
        "journal/students.html",
        with_context({
            # "user_id": user_id,
            "students": ls,
        }))
Exemple #11
0
def edit_attendance(request, attendance_id):
    att: Attendance = Attendance.objects.filter(id=attendance_id)[0]
    types = constants.ATT_TYPES

    return render(
        request, "journal/attendance_edit.html",
        with_context({
            "students":
            att.students.all().order_by('student__last_name').prefetch_related(
                'student'),
            "statuses":
            att.students.all().order_by('student__last_name').prefetch_related(
                'student'),
            "attendance_types":
            types,
            "attendance_id":
            attendance_id,
            "squad_code":
            att.squad.code,
            "date":
            att.date,
        }))
Exemple #12
0
def attendance(request):
    restrictions = None
    try:
        ext = UserExtension.objects.get(user=request.user)
    except UserExtension.DoesNotExist:
        ext = None
    if ext:
        allowed_squads = ext.squads.all()
        f = Attendance.objects.filter(squad__in=allowed_squads)
        restrictions = tAttendanceRestriction(
            date_restricted=ext.date_limit,
            date=date.today(),
            squads=allowed_squads,
            can_edit=ext.can_edit_attendance,
        )
    else:
        # all forms, no restrictions
        f = Attendance.objects.all()

    return render(
        request,
        "journal/attendance.html",
        with_context({"forms": f, "restrictions": restrictions}),
    )
Exemple #13
0
def student(request, student_id):
    st: Student = Student.objects.filter(id=student_id).first()
    all_subjects = Subject.objects.filter(timetable__squad__code=st.squad)
    avgs = []
    for subj in all_subjects:
        avgs.append(
            tAvg(
                short=subj.short,
                avg=avg_mark_student(
                    subj, student_id, date.today() - timedelta(weeks=300), date.today()
                ),
                # exams=
            )
        )
        # todo оценки с учётом пропусков
        # avgs.append(tAvg(
        #     short=subj.short + ' (с пропусками)',
        #     avg=get_avg_for_subject(subj, student_id, absent_zero=True)
        # ))

    atts = StudentAttendance.objects.filter(student=st)

    info = PersonalInfo.objects.filter(student=st).first()

    all_attendances = Attendance.objects.filter(squad=st.squad)

    penalties = Penalty.objects.filter(student=st)

    penalty_choices = {
        Penalty.REPRIMAND: "Взысканий",
        Penalty.PROMOTION: "Поощрений",
    }
    penalties_got_map = {
        penalty_choices[Penalty.PROMOTION]: 0,
        penalty_choices[Penalty.REPRIMAND]: 0,
    }

    for penalty in penalties:
        penalties_got_map[penalty_choices[penalty.type]] += 1

    penalty_stats = []
    for key, value in penalties_got_map.items():
        penalty_stats.append(tCount(label=key, count=value))

    duties = Duty.objects.filter(student=st)

    events = Event.objects.filter(eventparticipant__student=st).order_by("-date")

    return render(
        request,
        "journal/student.html",
        with_context(
            {
                "student": st,
                "avg_marks": avgs,
                "attendance_stats": get_attendance_stats(atts),
                "info": info,
                "penalties": penalties,
                "penalty_options": _get_options(Penalty.CHOICES),
                "penalty_stats": penalty_stats,
                "all_attendances": all_attendances,
                "duty_options": _get_options(Duty.CHOICES),
                "duty_stats": _get_avg_duty_marks(st),
                "duties": duties,
                "all_exams": _get_exam_marks(st),
                "stud_events": events,
                "available_events": Event.objects.exclude(id__in=events).order_by(
                    "-date"
                ),
                "all_events": Event.objects.all().order_by("-date"),
            }
        ),
    )