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, } ), )
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))
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, }))
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', '/'))
def attendance(request): f = Attendance.objects.all() return render(request, "journal/attendance.html", with_context({ "forms": f, }))
def students(request): ls: [Student] = Student.objects.all() return render( request, "journal/students.html", with_context({ # "user_id": user_id, "students": ls, }))
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 }) )
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 }))
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), }))
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, }))
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, }))
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}), )
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"), } ), )