def export_page(request):
    """
    Xuất danh sách các trường ra file csv
    Hàm xuất từ danh sách trường ra file csv
    """
    if checkInUrl(request, 'unit') is False:
        listFunction = request.user.list_function()
        return HttpResponseRedirect(reverse(listFunction[0]))
    try:
        nameFileExport = 'attachment; filename="{}.csv"'.format("ListUnit")
        list_unit = Units.objects.all()
        rows = ([i+1, unit.unitName, unit.unitDescription] for unit, i in zip(list_unit, range(list_unit.count())))
        response = HttpResponse(content_type='text/csv')
        response['Content-Disposition'] = nameFileExport
        writer = csv.writer(response)
        rows, rowCopy = tee(rows)
        # Ghi log
        createLog(request, 'EXPORT - Trường', str(len(list(rowCopy))) + ' bản ghi')
        writer.writerow(['stt', 'unitName', 'unitDescription'])
        [writer.writerow([row[0], row[1], row[2]]) for row in rows]
        createLog(request, 'EXPORT - Trường', '')
        return response
    except (Exception) as error:
        print(error)
        messages.error(request, "Thao tác thất bại.")
    return redirect('/adminuet/unit/')
Beispiel #2
0
def course_getListForOffset(request, offset, limit):
    """
    Hàm trả về  các row trong unit theo offset
    Trả về số lượng page mà chia theo limit
    """
    if checkInUrl(request, 'course') is False:
        listFunction = request.user.list_function()
        return HttpResponseRedirect(reverse(listFunction[0]))
    if request.method == 'GET':
        unitRole = request.user.unit_role
        if unitRole == 0:
            courses = Courses.objects.order_by('-courseID').all()
        else:
            courses = Courses.objects.order_by('-courseID').filter(unit=unitRole).all()
        courseList = courses[offset:offset + limit].select_related('unit')
        courseCount = courses.count()
        courseSerializer = CoursesSerializer(courseList, many = True)
        page = math.ceil(courseCount/limit)
        for cS, cL in zip(courseSerializer.data, courseList):
            cS['unit'] = cL.unit.unitName
        data = {
            'data': courseSerializer.data,
            'numberOfPage': page,
        }
        createLog(request, 'VIEW - Môn học', '')
        return Response(data)
def import_page(request):
    """
    Đọc file csv để nhập vào DB
    Hàm nhập từ file csv các trường stt, unitName, unitDescription vào model Units
    """
    if checkInUrl(request, 'unit') is False:
        listFunction = request.user.list_function()
        return HttpResponseRedirect(reverse(listFunction[0]))
    template = 'adminuet/unitimport.html'
    if request.method == 'GET':
        return TemplateResponse(request, template)
    try:
        csv_file = request.FILES['document']
    except (Exception) as error:
        messages.error(request,'Lỗi: Chưa chọn tệp dữ liệu.')
        return TemplateResponse(request, template)
    if not csv_file.name.endswith('.csv'):
        messages.error(request,'Lỗi: Sai định dạng tệp. Vui lòng chọn lại tệp')
        return TemplateResponse(request, template)
    try:
        df = pd.read_csv(csv_file).set_index("stt")
        create_from_DF(df=df, model=Units, searching_cols=['unitName'])
        # Ghi log
        message =  str(len(df)) + ' bản ghi'
        createLog(request, 'IMPORT - Trường', message)
    except (Exception) as error:
        messages.error(request,'Lỗi: Dữ liệu không đúng định dạng.')
        return TemplateResponse(request, template)
    return redirect('/adminuet/unit/')
def export_page(request):
    """
    Thực hiện xuất file các môn học
    """
    if checkInUrl(request, 'course') is False:
        listFunction = request.user.list_function()
        return HttpResponseRedirect(reverse(listFunction[0]))
    nameFileExport = 'attachment; filename="{}.csv"'.format("ListCourse")
    unitRole = request.user.unit_role
    if unitRole == 0:
        list_course = Courses.objects.all().select_related('unit')
    else:
        list_course = Courses.objects.filter(
            unit=unitRole).all().select_related('unit')
    rows = ([
        i + 1, course.courseCode, course.courseName, course.unit.unitName,
        course.credit
    ] for course, i in zip(list_course, range(list_course.count())))

    response = HttpResponse(content_type='text/csv')
    response['Content-Disposition'] = nameFileExport
    response.write(u'\ufeff'.encode('utf8'))
    writer = csv.writer(response)
    writer.writerow(['stt', 'courseCode', 'courseName', 'unit', 'credit'])

    for r in rows:
        writer.writerow([r[0], r[1], r[2], r[3], r[4]])
    createLog(request, 'EXPORT - Môn học', '')
    return response
Beispiel #5
0
def role_getListForOffset(request, offset, limit):
    """
    Hàm trả về  các row trong role theo offset
    Trả về số lượng page mà chia theo limit
    """
    if checkInUrl(request, 'role') is False:
        listFunction = request.user.list_function()
        return HttpResponseRedirect(reverse(listFunction[0]))
    if request.method == 'GET':
        role_functions = Role_Function.objects.order_by(
            '-ID').all()[offset:offset + limit].select_related(
                'function', 'role')
        roleFunctionSerializer = RoleFunctionSerializer(role_functions,
                                                        many=True)
        roles = Roles.objects.order_by('-roleID').all()
        roleResult = roles[offset:offset + limit]

        page = math.ceil(roles.count() / limit)
        roleSerializer = RoleSerializer(roleResult, many=True)
        data = {
            'data': roleSerializer.data,
            'numberOfPage': page,
        }
        createLog(request, 'VIEW - Vai trò', '')
        return Response(data)
Beispiel #6
0
def course_avg_transcript(request):
    if checkInUrl(request, 'course-avg') is False:
        listFunction = request.user.list_function()
        return HttpResponseRedirect(reverse(listFunction[0]))
    if request.method == 'GET':
        unitRole = request.user.unit_role
        if unitRole == 0:
            units = Units.objects.all()
        elif unitRole is None:
            # units = Profiles.objects.filter(user=request.user).select_related("major__unit")
            unitIdQuery = Profiles.objects.filter(user=request.user)
            unitId = 1
            for i in unitIdQuery:
                unitId = i.major.unit.unitID
            units = Units.objects.filter(unitID=unitId).all()
        else:
            units = Units.objects.filter(pk=unitRole)

        context = {
            'units': units,
        }
        createLog(request, 'VIEW - Thống kê', 'Điểm trung bình')
        return TemplateResponse(request,
                                'adminuet/courseavg.html',
                                context=context)
Beispiel #7
0
def gpa_generation(request):
    if checkInUrl(request, 'statistical-gpa') is False:
        listFunction = request.user.list_function()
        return HttpResponseRedirect(reverse(listFunction[0]))
    if request.method == 'GET':
        unitRole = request.user.unit_role
        if unitRole == 0:
            units = Units.objects.all()
        elif unitRole is None:
            # units = Profiles.objects.filter(user=request.user).select_related("major__unit")
            unitIdQuery = Profiles.objects.filter(user=request.user)
            unitId = 1
            for i in unitIdQuery:
                unitId = i.major.unit.unitID
            units = Units.objects.filter(unitID=unitId).all()
        else:
            units = Units.objects.filter(pk=unitRole)

        majors = Majors.objects.all()
        generations = Generations.objects.all()
        context = {
            'units': units,
            'generations': generations,
            'majors': majors,
        }
        createLog(request, 'VIEW - Thống kê', 'GPA')
        return TemplateResponse(request,
                                'adminuet/gpageneration.html',
                                context=context)
Beispiel #8
0
def distribute_transcript(request):
    if checkInUrl(request, 'statistical') is False:
        listFunction = request.user.list_function()
        return HttpResponseRedirect(reverse(listFunction[0]))
    curruntUser = request.user
    if request.method == 'GET':
        unitRole = request.user.unit_role
        if unitRole == 0:
            units = Units.objects.all()
        elif unitRole is None:
            # units = Profiles.objects.filter(user=request.user).select_related("major__unit")
            unitIdQuery = Profiles.objects.filter(user=request.user)
            unitId = 1
            for i in unitIdQuery:
                unitId = i.major.unit.unitID
            units = Units.objects.filter(unitID=unitId).all()
        else:
            units = Units.objects.filter(pk=unitRole)
        semesters = Semesters.objects.all()
        context = {
            'units': units,
            'semesters': semesters,
        }
        createLog(request, 'VIEW - Thống kê', 'Phổ điểm')
        return TemplateResponse(request,
                                'adminuet/statistical.html',
                                context=context)
Beispiel #9
0
def export_page(request):
    """
    xuất danh sách các role ra file csv
    Thuộc tính của file csv: stt, roleName, roleDescription
    """
    if checkInUrl(request, 'role') is False:
        listFunction = request.user.list_function()
        return HttpResponseRedirect(reverse(listFunction[0]))
    try:
        nameFileExport = 'attachment; filename="{}.csv"'.format("ListRole")
        list_role = Roles.objects.all()
        rows = ([i + 1, role.roleName, role.roleDescription]
                for role, i in zip(list_role, range(list_role.count())))
        response = HttpResponse(content_type='text/csv')
        response['Content-Disposition'] = nameFileExport
        response.write(u'\ufeff'.encode('utf8'))
        writer = csv.writer(response)
        writer.writerow(['stt', 'roleName', 'roleDescription'])
        [writer.writerow([row[0], row[1], row[2]]) for row in rows]
        createLog(request, 'EXPORT - Vai trò', '')
        return response
    except (Exception) as error:
        print(error)
        messages.error(request, "Thao tác thất bại.")
    return redirect('/adminuet/role/')
Beispiel #10
0
def export_page(request):
    """
    Thực hiện xuất danh sách các lớp ra file csv
    """
    if checkInUrl(request, 'group') is False:
        listFunction = request.user.list_function()
        return HttpResponseRedirect(reverse(listFunction[0]))
    try:
        nameFileExport = 'attachment; filename="{}.csv"'.format("ListGroup")
        unitRole = request.user.unit_role
        if unitRole == 0:
            list_group = StudentGroups.objects.all()
        else:
            list_group = StudentGroups.objects.filter(
                generation__unit=unitRole).all()
        rows = ([i + 1, group.groupName, group.generation]
                for group, i in zip(list_group, range(list_group.count())))
        response = HttpResponse(content_type='text/csv')
        response['Content-Disposition'] = nameFileExport
        response.write(u'\ufeff'.encode('utf8'))
        writer = csv.writer(response)
        writer.writerow(['stt', 'groupName', 'generation'])
        [writer.writerow([row[0], row[1], row[2]]) for row in rows]
        createLog(request, 'EXPORT - Lớp', '')
        return response
    except Exception as error:
        print(error)
        messages.error(request, "Thao tác thất bại.")
    return redirect('/adminuet/group/')
Beispiel #11
0
def generation_getListForOffset(request, offset, limit):
    """Lấy danh sách các khóa từ vị trí offset limit số bản ghi
    Hàm trả về  các row trong unit theo offset
    Trả về số lượng page mà chia theo limit
    """
    if checkInUrl(request, 'generation') is False:
        listFunction = request.user.list_function()
        return HttpResponseRedirect(reverse(listFunction[0]))
    if request.method == 'GET':
        unitRole = request.user.unit_role
        # Rule admin
        if unitRole == 0:
            generations = Generations.objects.order_by('-generationID').all()
        else:  # Rule quản trị cấp trường
            generations = Generations.objects.order_by('-generationID').filter(
                unit=unitRole).all()
        generationList = generations[offset:offset + limit].select_related(
            'beginningYear', 'unit')
        generationCount = generations.count()
        generationSerializer = GenerationSerializer(generationList, many=True)
        for p, row in zip(generationList, generationSerializer.data):
            row['beginningYear'] = p.beginningYear.yearName
            row['unit'] = p.unit.unitName
        page = math.ceil(generationCount / limit)
        data = {
            'data': generationSerializer.data,
            'numberOfPage': page,
        }
        createLog(request, 'VIEW - Khóa', '')
        return Response(data)
def export_page(request):
    """
    Thuộc tính của file csv: stt, roleName, roleDescription
    """

    if checkInUrl(request, 'learningoutcome') is False:
        listFunction = request.user.list_function()
        return HttpResponseRedirect(reverse(listFunction[0]))
    try:
        nameFileExport = 'attachment; filename="{}.csv"'.format(
            "ListTranscript")
        unitRole = request.user.unit_role
        if unitRole == 0:
            transcript = Transcript.objects.all()
        else:
            transcript = Transcript.objects.filter(
                student__major__unit=unitRole).all()
        rows = ([i + 1, t.student, t.course, t.semester, t.grade]
                for t, i in zip(transcript, range(transcript.count())))
        response = HttpResponse(content_type='text/csv')
        response['Content-Disposition'] = nameFileExport
        response.write(u'\ufeff'.encode('utf8'))
        writer = csv.writer(response)
        writer.writerow(['stt', 'student', 'course', 'semeste', 'grade'])
        [
            writer.writerow([row[0], row[1], row[2], row[3], row[4]])
            for row in rows
        ]
        createLog(request, 'EXPORT - Kết quả học tập', '')
        return response
    except Exception as error:
        print(error)
        messages.error(request, "Thao tác thất bại.")
    return redirect('/adminuet/learningoutcome/')
Beispiel #13
0
def export_page(request):
    """
    Thực hiện xuất file csv các khóa
    """
    if checkInUrl(request, 'generation') is False:
        listFunction = request.user.list_function()
        return HttpResponseRedirect(reverse(listFunction[0]))
    try:
        nameFileExport = 'attachment; filename="{}.csv"'.format(
            "ListGeneration")
        unitRole = request.user.unit_role
        # Rule admin
        if unitRole == 0:
            list_generation = Generations.objects.all()
        else:  # Rule quản trị cấp trường
            list_generation = Generations.objects.filter(unit=unitRole).all()
        rows = ([
            i + 1, generation.generationName, generation.beginningYear,
            generation.unit
        ] for generation, i in zip(list_generation,
                                   range(list_generation.count())))
        response = HttpResponse(content_type='text/csv')
        response['Content-Disposition'] = nameFileExport
        writer = csv.writer(response)
        writer.writerow(['stt', 'generationName', 'beginningYear', 'unit'])
        [writer.writerow([row[0], row[1], row[2], row[3]]) for row in rows]
        createLog(request, 'EXPORT - Khóa', '')
        return response
    except Exception as error:
        print(error)
        messages.error(request, "Thao tác thất bại.")
    return redirect('/adminuet/generation/')
Beispiel #14
0
def major_getListForOffset(request, offset, limit):
    """
    Hàm trả về  các row trong major theo offset
    Trả về số lượng page mà chia theo limit
    """
    if checkInUrl(request, 'major') is False:
        listFunction = request.user.list_function()
        return HttpResponseRedirect(reverse(listFunction[0]))
    if request.method == 'GET':
        unitRole = request.user.unit_role
        if unitRole == 0:
            majors = Majors.objects.order_by('-majorID').all()
        else:
            majors = Majors.objects.order_by('-majorID').filter(unit=unitRole).all()
        majorList = majors[offset:offset + limit].select_related('unit')
        majorCount = majors.count()
        majorSerializer = MajorSerializer(majorList, many = True)
        page = math.ceil(majorCount/limit)
        for mS, mL in zip(majorSerializer.data, majorList):
            mS['unit'] = mL.unit.unitName
        data = {
            'data': majorSerializer.data,
            'numberOfPage': page,
        }
        # Ghi log
        createLog(request, 'VIEW - Ngành', '')
        return Response(data)
def transcript_getListForOffset(request, offset, limit):
    """
    Hàm trả về  các row trong unit theo offset
    Trả về số lượng page mà chia theo limit
    """
    if checkInUrl(request, 'learningoutcome') is False:
        listFunction = request.user.list_function()
        return HttpResponseRedirect(reverse(listFunction[0]))
    if request.method == 'GET':
        unitRole = request.user.unit_role
        if unitRole == 0:
            transcripts = Transcript.objects.order_by('-transcriptID').all()
        else:
            transcripts = Transcript.objects.filter(
                student__major__unit=unitRole).order_by('-transcriptID').all()
        transcriptList = transcripts[offset:offset + limit].select_related(
            'student', 'course', 'semester')
        transcriptCount = transcripts.count()
        transcriptSerializer = TranscriptSerializer(transcriptList, many=True)
        for tl, ts in zip(transcriptList, transcriptSerializer.data):
            ts['studentCode'] = tl.student.MSSV
            ts['student'] = str(tl.student.lastName) + ' ' + str(
                tl.student.firstName)
            ts['course'] = tl.course.courseName
            ts['semester'] = tl.semester.semesterName
        page = math.ceil(transcriptCount / limit)
        data = {
            'data': transcriptSerializer.data,
            'numberOfPage': page,
        }
        createLog(request, 'VIEW - Kết quả học tập', '')
        return Response(data)
Beispiel #16
0
def trainingframework_getListForOffset(request, offset, limit):
    """
    Hàm trả về  các row trong unit theo offset
    Trả về số lượng page mà chia theo limit
    """
    if checkInUrl(request, 'trainingframework') is False:
        listFunction = request.user.list_function()
        return HttpResponseRedirect(reverse(listFunction[0]))
    if request.method == 'GET':
        unitRole = request.user.unit_role
        if unitRole == 0:
            trainingframeworks = Major_Course.objects.order_by('-ID').all()
        else:
            trainingframeworks = Major_Course.objects.filter(
                major__unit=unitRole).order_by('-ID').all()
        trainingframeworkList = trainingframeworks[offset:offset +
                                                   limit].select_related(
                                                       'course', 'major')
        trainingframeworkCount = trainingframeworks.count()
        trainingframeworkSerializer = TrainingframeworkSerializer(
            trainingframeworkList, many=True)
        for t, ts in zip(trainingframeworkList,
                         trainingframeworkSerializer.data):
            ts['course'] = t.course.courseName
            ts['major'] = t.major.majorName
        page = math.ceil(trainingframeworkCount / limit)
        data = {
            'data': trainingframeworkSerializer.data,
            'numberOfPage': page,
        }
        createLog(request, 'VIEW - Khung đào tạo', '')
        return Response(data)
Beispiel #17
0
def export_page(request):
    """
    Xuất danh sách năm học ra file csv
    Hàm xuất từ danh sách năm học ra file csv
    """
    if checkInUrl(request, 'year') is False:
        listFunction = request.user.list_function()
        return HttpResponseRedirect(reverse(listFunction[0]))
    try:
        nameFileExport = 'attachment; filename="{}.csv"'.format("ListYear")
        list_year = Years.objects.all()
        rows = ([i + 1, year.yearName, year.active]
                for year, i in zip(list_year, range(list_year.count())))
        response = HttpResponse(content_type='text/csv')
        response['Content-Disposition'] = nameFileExport
        writer = csv.writer(response)
        writer.writerow(['stt', 'yearName', 'active'])
        for row in rows:
            if str(row[2]).lower() == 'true': row[2] = 'Kích hoạt'
            elif str(row[2]).lower() == 'false': row[2] = 'Không kích hoạt'
            writer.writerow([row[0], row[1], row[2]])
        createLog(request, 'EXPORT - Năm học', '')
        return response
    except Exception as error:
        print(error)
        messages.error(request, "Thao tác thất bại.")
    return redirect('/adminuet/year/')
Beispiel #18
0
def gpa_student(request):
    if checkInUrl(request, 'statistical-gpa-student') is False:
        listFunction = request.user.list_function()
        return HttpResponseRedirect(reverse(listFunction[0]))
    if request.method == 'GET':
        unitRole = request.user.unit_role
        if unitRole == 0:
            profiles = Profiles.objects.all().select_related('user')
        elif unitRole is None:
            profiles = Profiles.objects.filter(
                user_id=request.user.id).select_related('user')
        else:
            profiles = Profiles.objects.filter(
                major__unit_id=unitRole).select_related('user')
        # else:
        #     roleId = request.user.role_id

        # print(profiles)
        semesters = Semesters.objects.all()
        dict_semesters = {}
        for semester in semesters:
            dict_semesters[semester.semesterID] = semester.semesterName
        context = {
            'profiles': profiles,
            'semesters': dumps(dict_semesters),
        }
        createLog(request, 'VIEW - Thống kê', 'GPA Sinh viên')
        return TemplateResponse(request,
                                'adminuet/gpastudent.html',
                                context=context)
Beispiel #19
0
def semester_getListForOffset(request, offset, limit):
    """
    Hàm trả về  các row trong semester theo offset
    Trả về số lượng page mà chia theo limit
    """
    if checkInUrl(request, 'semester') is False:
        listFunction = request.user.list_function()
        return HttpResponseRedirect(reverse(listFunction[0]))
    if request.method == 'GET':
        semesters = Semesters.objects.order_by('semesterID').all()
        semesterList = semesters[offset:offset + limit].select_related('year')
        semesterCount = semesters.count()
        semesterSerializer = SemesterSerializer(semesterList, many=True)
        for sS, sL in zip(semesterSerializer.data, semesterList):
            sS['year'] = sL.year.yearName
            if sS['beginDay'] is None:
                sS['beginDay'] = "Chưa có dữ liệu"
            if sS['endDay'] is None:
                sS['endDay'] = "Chưa có dữ liệu"
        page = math.ceil(semesterCount / limit)
        data = {
            'data': semesterSerializer.data,
            'numberOfPage': page,
        }
        createLog(request, 'VIEW - Học kỳ', '')
        return Response(data)
Beispiel #20
0
def group_getListForOffset(request, offset, limit):
    """
    Hàm trả về  các row trong major theo offset
        Trả về số lượng page mà chia theo limit group
    """
    if checkInUrl(request, 'group') is False:
        listFunction = request.user.list_function()
        return HttpResponseRedirect(reverse(listFunction[0]))
    if request.method == 'GET':
        unitRole = request.user.unit_role
        # Rule admin
        if unitRole == 0:
            groups = StudentGroups.objects.order_by('-groupID').all()
        else:  # Rule quản trị cấp trường
            groups = StudentGroups.objects.filter(
                generation__unit=unitRole).order_by('-groupID').all()
        groupList = groups[offset:offset + limit].select_related('generation')
        groupCount = groups.count()
        groupSerializer = GroupSerializer(groupList, many=True)
        page = math.ceil(groupCount / limit)
        for group, row in zip(groupList, groupSerializer.data):
            row['generation'] = group.generation.generationName + ' - ' + group.generation.unit.unitName
        data = {
            'data': groupSerializer.data,
            'numberOfPage': page,
        }
        createLog(request, 'VIEW - Lớp', '')
        return Response(data)
def course_getListForOffset(request, offset, limit):
    """
    Lấy danh sách các môn học có số lượng và từ vị trí offset
    Phụ thuộc vào vai trò
    """
    if checkInUrl(request, 'course') is False:
        listFunction = request.user.list_function()
        return HttpResponseRedirect(reverse(listFunction[0]))
    if request.method == 'GET':
        unitRole = request.user.unit_role
        # Rule admin
        if unitRole == 0:
            courses = Courses.objects.order_by('-courseID').all()
        else:  # Quản trị cấp trường
            courses = Courses.objects.order_by('-courseID').filter(
                unit=unitRole).all()
        courseList = courses[offset:offset + limit].select_related('unit')
        courseCount = courses.count()
        courseSerializer = CoursesSerializer(courseList, many=True)
        page = math.ceil(courseCount / limit)
        for cS, cL in zip(courseSerializer.data, courseList):
            cS['unit'] = cL.unit.unitName
        data = {
            'data': courseSerializer.data,
            'numberOfPage': page,
        }
        createLog(request, 'VIEW - Môn học', '')
        return Response(data)
Beispiel #22
0
def suggestioncourse_page(request):
    if checkInUrl(request, 'suggestioncourse') is False:
        listFunction = request.user.list_function()
        return HttpResponseRedirect(reverse(listFunction[0]))
    if request.method == 'GET':
        unitRole = request.user.unit_role
        profiles = []
        isStudent = False
        if unitRole == 0:
            profiles = Profiles.objects.all().values('profileID', 'firstName',
                                                     'lastName', 'MSSV')
        elif unitRole is None:
            profiles = Profiles.objects.filter(user_id=request.user.id).values(
                'profileID', 'firstName', 'lastName', 'MSSV')
            isStudent = True
        else:
            profiles = Profiles.objects.filter(major__unit_id=unitRole).values(
                'profileID', 'firstName', 'lastName', 'MSSV')
        context = {
            'profiles': profiles,
            'isStudent': isStudent,
        }
        createLog(request, 'VIEW - Gợi ý môn học', '')
    return TemplateResponse(request,
                            'adminuet/suggestioncourse.html',
                            context=context)
def import_page(request):
    """
    Thực hiện đọc file csv để thêm vào DB
    """
    if checkInUrl(request, 'major') is False:
        listFunction = request.user.list_function()
        return HttpResponseRedirect(reverse(listFunction[0]))
    template = 'adminuet/majorimport.html'
    units = Units.objects.all()
    context = {
        'units': units,
    }
    if request.method == 'GET':
        return TemplateResponse(request, template, context=context)
    if request.method == 'POST':
        unitInput = request.POST['unit']
        checkUnit = Units.objects.filter(unitID=unitInput)
        # Kiểm tra unitID client gửi lên có tồn tại không
        if checkUnit.exists():
            try:
                csv_file = request.FILES['document']
            except (Exception) as error:
                messages.error(request, 'Lỗi: Chưa chọn tệp dữ liệu.')
                context['lastUnitInput'] = unitInput
                return TemplateResponse(request, template, context=context)
            if not csv_file.name.endswith('.csv'):
                context['lastUnitInput'] = unitInput
                messages.error(
                    request, 'Lỗi: Sai định dạng tệp. Vui lòng chọn lại tệp')
                return TemplateResponse(request, template, context=context)
            try:
                df = pd.read_csv(csv_file)
                unitId = -1
                for u in checkUnit:
                    unitId = u.unitID
                count = 0
                # đọc từng dòng có trong file csv
                for i, row in df.iterrows():
                    majorName = row['Major']
                    majorDescription = row['Major_Description']
                    try:
                        toDatabase = Majors(unit_id=unitId,
                                            majorName=majorName,
                                            majorDescription=majorDescription)
                        toDatabase.save()
                        count += 1
                    except (Exception) as error:
                        print(error)
                # Ghi log
                createLog(request, 'IMPORT - Ngành', str(count) + ' bản ghi')
            except (Exception) as error:
                print(error)
                messages.error(request, 'Lỗi: Dữ liệu không đúng định dạng.')
                context['lastUnitInput'] = unitInput
                return TemplateResponse(request, template, context=context)
            return redirect('/adminuet/major/')
        else:
            messages.error(request, 'Lỗi: Đã xảy ra lỗi vui lòng thử lại.')
            context['lastUnitInput'] = unitInput
            return TemplateResponse(request, template, context=context)
Beispiel #24
0
def year_getListForOffset(request, offset, limit):
    """
    Lấy danh sách các năm học từ vị trí và limit bản ghi
    Hàm trả về  các row trong year theo offset
    Trả về số lượng page mà chia theo limit
    """
    if checkInUrl(request, 'year') is False:
        listFunction = request.user.list_function()
        return HttpResponseRedirect(reverse(listFunction[0]))
    if request.method == 'GET':
        years = Years.objects.order_by('-yearID').all()
        yearList = years[offset:offset + limit]
        yearCount = years.count()
        yearSerializer = YearSerializer(yearList, many=True)
        page = math.ceil(yearCount / limit)
        for year in yearSerializer.data:
            if str(year['active']).lower() == 'true':
                year['active'] = 'Kích hoạt'
            else:
                year['active'] = 'Không kích hoạt'
        data = {
            'data': yearSerializer.data,
            'numberOfPage': page,
        }
        createLog(request, 'VIEW - Năm học', '')
        return Response(data)
Beispiel #25
0
def user_form(request, id=0):

    if checkInUrl(request, 'user') is False:
        listFunction = request.user.list_function()
        return HttpResponseRedirect(reverse(listFunction[0]))
    try:
        if request.method == 'GET':
            if id == 0:
                userForm = CustomUserForm()
            else:
                user = CustomUser.objects.get(pk=id)
                userForm = CustomUserForm(instance=user)
            return TemplateResponse(request, 'adminuet/userform.html',
                                    {'form': userForm})
        else:
            contentLog = 'UPDATE - Người dùng'
            if id == 0:
                userForm = CustomUserForm(request.POST)
                contentLog = 'INSERT - Người dùng'
            else:
                user = CustomUser.objects.get(pk=id)
                userForm = CustomUserForm(request.POST, instance=user)
            if userForm.is_valid():
                userForm.save()
                createLog(request, contentLog, '')
    except Exception as error:
        print(error)
    return redirect('/adminuet/user/')
Beispiel #26
0
def export_page(request):
    """
    Hàm xuất từ danh sách trường ra file csv
    """
    if checkInUrl(request, 'trainingframework') is False:
        listFunction = request.user.list_function()
        return HttpResponseRedirect(reverse(listFunction[0]))
    try:
        unitRole = request.user.unit_role
        nameFileExport = 'attachment; filename="{}.csv"'.format(
            "ListTrainingframework")
        if unitRole == 0:
            list_majorcourse = Major_Course.objects.all()
        else:
            list_majorcourse = Major_Course.objects.filter(
                major__unit=unitRole).all()
        rows = ([
            i + 1, majorcourse.course, majorcourse.major,
            majorcourse.semesterRecommended
        ] for majorcourse, i in zip(list_majorcourse,
                                    range(list_majorcourse.count())))
        response = HttpResponse(content_type='text/csv')
        response['Content-Disposition'] = nameFileExport
        writer = csv.writer(response)
        writer.writerow(['stt', 'course', 'major', 'semesterRecommended'])
        for row in rows:
            writer.writerow([row[0], row[1], row[2], row[3]])
        createLog(request, 'EXPORT - Khung đào tạo', '')
        return response
    except (Exception) as error:
        print(error)
    return redirect('/adminuet/trainingframework/')
Beispiel #27
0
def export_page(request):
    if checkInUrl(request, 'major') is False:
        listFunction = request.user.list_function()
        return HttpResponseRedirect(reverse(listFunction[0]))
    try:
        unitRole = request.user.unit_role
        nameFileExport = 'attachment; filename="{}.csv"'.format("ListMajor")
        if unitRole == 0:
            list_major = Majors.objects.all()
        else:
            list_major = Majors.objects.filter(unit=unitRole)
        rows = ([i+1, major.majorName, major.unit, major.majorDescription] for major, i in zip(list_major, range(list_major.count())))
        response = HttpResponse(content_type='text/csv')
        response['Content-Disposition'] = nameFileExport
        writer = csv.writer(response)
        rows, rowCopy = tee(rows)
        # Ghi log
        createLog(request, 'EXPORT - Ngành', str(len(list(rowCopy))) + ' bản ghi')
        writer.writerow(['stt', 'majorName', 'unit', 'majorDescription'])
        [writer.writerow([row[0], row[1], row[2], row[3]]) for row in rows]
        createLog(request, 'EXPORT - Ngành', '')
        return response
    except Exception as error:
        print(error)
        messages.error(request, "Thao tác thất bại.")
    return redirect('/adminuet/major/')
Beispiel #28
0
def semester_form(request, id=0):
    """
    Form chung cho cả Thêm mới và Sửa
    Thêm mới dùng POST
    Sửa dùng GET để lấy thêm dữ liệu của row hiện tại
    """
    if checkInUrl(request, 'semester') is False:
        listFunction = request.user.list_function()
        return HttpResponseRedirect(reverse(listFunction[0]))
    try:
        if request.method == 'GET':
            if id == 0:
                semesterForm = SemesterForm()
            else:
                semester = Semesters.objects.get(pk=id)
                semesterForm = SemesterForm(instance=semester)
            return TemplateResponse(request, 'adminuet/semesterform.html',
                                    {'form': semesterForm})
        else:
            contentLog = 'UPDATE - Học kỳ'
            contentMsg = 'Cập nhật thành công.'
            if id == 0:
                semesterForm = SemesterForm(request.POST)
                contentLog = 'INSERT - Học kỳ'
                contentMsg = 'Thêm mới thành công.'
            else:
                semester = Semesters.objects.get(pk=id)
                semesterForm = SemesterForm(request.POST, instance=semester)
            if semesterForm.is_valid():
                semesterNameNew = semesterForm['semesterName'].value()
                semesterYearNew = semesterForm['year'].value()
                semesterBeginDayNew = semesterForm['beginDay'].value()
                semesterEndDayNew = semesterForm['endDay'].value()
                if semesterBeginDayNew == "" and semesterEndDayNew == "":
                    semesterBeginDayNew = "2000-06-20"
                    semesterEndDayNew = "2000-06-21"
                if not checkSemesterNameAndYearExist(
                        semesterNameNew, semesterYearNew, semesterBeginDayNew,
                        semesterEndDayNew):
                    if checkCompareBeginDayAndEndDay(semesterBeginDayNew,
                                                     semesterEndDayNew):
                        semesterForm.save()
                        createLog(request, contentLog, str(semesterNameNew))
                        messages.success(request, contentMsg)
                    else:
                        messages.error(
                            request,
                            'Vui lòng thay đổi thời gian bắt đầu và thời gian kết thúc.'
                        )
                        return redirect('/adminuet/semester-form/' + str(id))
                else:
                    messages.error(
                        request,
                        'Vui lòng thay đổi kỳ học. Kỳ học này đã tồn tại.')
                    return redirect('/adminuet/semester-form/' + str(id))
    except (Exception) as error:
        print(error)
        messages.error(request, "Thao tác thất bại.")
    return redirect('/adminuet/semester/')
Beispiel #29
0
def year_form(request, id=0, generate_semesters=True):
    """
    Form chung cho cả Thêm mới và Sửa
    Thêm mới dùng POST
    Sửa dùng GET để lấy thêm dữ liệu của row hiện tại
    """

    if checkInUrl(request, 'year') is False:
        listFunction = request.user.list_function()
        return HttpResponseRedirect(reverse(listFunction[0]))
    try:
        if request.method == 'GET':
            if id == 0:
                yearForm = YearForm()
            else:
                year = Years.objects.get(pk=id)
                yearForm = YearForm(instance=year)
            return TemplateResponse(request, 'adminuet/yearform.html',
                                    {'form': yearForm})
        else:
            contentLog = 'UPDATE - Năm học'
            contentMsg = 'Cập nhật thành công'
            if id == 0:
                yearForm = YearForm(request.POST)
                contentLog = 'INSERT - Năm học'
                contentMsg = "Thêm mới thành công."
            else:
                year = Years.objects.get(pk=id)
                yearForm = YearForm(request.POST, instance=year)
            if yearForm.is_valid():
                yearNameNew = yearForm['yearName'].value()
                status = yearForm['active'].value()

                if not checkYearNameExist(yearNameNew.strip(), status):
                    try:
                        year = yearForm.save()
                        if generate_semesters:
                            auto_generate_semesters(year=year)
                        createLog(request, contentLog, yearNameNew)
                        messages.success(request, contentMsg)
                    except Exception as e:
                        messages.error(
                            request,
                            'Vui lòng thay đổi ngày khai giảng. Mỗi năm chỉ tồn tại một ngày khai giảng.'
                        )
                        return redirect('/adminuet/year-form/' + str(id))

                else:
                    messages.error(
                        request,
                        'Vui lòng thay đổi năm học. Năm học này đã tồn tại.')
                    return redirect('/adminuet/year-form/' + str(id))
    except Exception as error:
        print(error)
        messages.error(request, "Thao tác thất bại.")
    return redirect('/adminuet/year/')
Beispiel #30
0
def course_form(request, course_id=0):
    """
    Form chung cho cả Thêm mới và Sửa
    Thêm mới dùng POST
    Sửa dùng GET để lấy thêm dữ liệu của row hiện tại
    """
    if checkInUrl(request, 'course') is False:
        listFunction = request.user.list_function()
        return HttpResponseRedirect(reverse(listFunction[0]))
    try:
        unitRole = request.user.unit_role
        if request.method == 'GET':
            if course_id == 0:
                courseForm = CoursesForm()
            else:
                course = Courses.objects.get(pk=course_id)
                courseForm = CoursesForm(instance=course)
            return TemplateResponse(request, 'adminuet/courseform.html', {'form': courseForm, 'unitRole': unitRole})
        else:
            if course_id == 0:
                courseForm = CoursesForm(request.POST)
            else:
                course = Courses.objects.get(pk=course_id)
                courseForm = CoursesForm(request.POST, instance = course)
            # if courseForm.is_valid():
            courseNameNew = courseForm['courseName'].value()
            courseCodeNew = courseForm['courseCode'].value()
            creditNew = courseForm['credit'].value()
            unitIDNew = unitRole #courseForm['unit'].value()
            if courseForm['unit'].value() is not None:
                unitIDNew = courseForm['unit'].value()
            
            if not checkCourseNameAndUnitExist(courseNameNew.strip(), unitIDNew) and courseNameNew.strip():
                if course_id == 0:
                    courseInsert = Courses(unit_id=unitIDNew, courseCode=courseCodeNew, courseName=courseNameNew, credit=creditNew)
                    courseInsert.save()
                    createLog(request, 'INSERT - Môn học', courseNameNew)
                    messages.success(request, "Thêm mới thành công.")
                else:
                    courseUpdate = Courses.objects.get(pk=course_id)
                    courseUpdate.unit_id = unitIDNew
                    courseUpdate.courseCode = courseCodeNew
                    courseUpdate.courseName = courseNameNew
                    courseUpdate.credit = creditNew
                    courseUpdate.save()
                    createLog(request, 'UPDATE - Môn học', courseNameNew)
                    messages.success(request, "Cập nhật thành công.")
                # courseForm.save()
            else:
                messages.error(request, 'Vui lòng thay đổi tên môn học. Môn học này đã tồn tại.')
                return redirect('/adminuet/course-form/'+str(course_id))
    except Exception as error:
        print(error)
        messages.error(request, "Thao tác thất bại.")
    return redirect('/adminuet/course/')