Esempio n. 1
0
def import_page(request):
    """Thực hiện nhập các chức năng từ file csv
    Hàm nhập từ file csv các trường stt, functionName vào model functions
    """
    if checkInUrl(request, 'function') is False:
        listFunction = request.user.list_function()
        return HttpResponseRedirect(reverse(listFunction[0]))
    template = 'adminuet/functionimport.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)
        create_from_DF(df=df, model=Functions, searching_cols=['functionName'])
    except (Exception) as error:
        print(error)
        messages.error(request,'Lỗi: Dữ liệu không đúng định dạng.')
        return TemplateResponse(request, template)
    return redirect('/adminuet/function/')
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/')
Esempio n. 3
0
def import_page(request):
    """
    Hàm nhập từ file csv các trường stt, semester, year, beginDay, endDay vào model Semesters
    """
    if checkInUrl(request, 'semester') is False:
        listFunction = request.user.list_function()
        return HttpResponseRedirect(reverse(listFunction[0]))
    template = 'adminuet/semesterimport.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")
        years = Years.objects.all()
        dict_year = {}
        for year in years:
            dict_year[year.yearName.lower()] = year.yearID
        for i, row in df.iterrows():
            if row['year_id'].lower() in dict_year:
                row['year_id'] = dict_year[row['year_id'].lower()]
            else:
                messages.error(
                    request,
                    'Lỗi: Trong hệ thống không tồn tại ' + row['year'] + '.')
                return TemplateResponse(request, template)
            if checkCompareBeginDayAndEndDay(row['beginDay'],
                                             row['endDay']) is False:
                messages.error(
                    request, 'Lỗi: Begin day lớn hơn end day ở hàng ' +
                    str(row['stt']) + '.')
                return TemplateResponse(request, template)
            print(row['year_id'])
        create_from_DF(
            df=df,
            model=Semesters,
            searching_cols=['semesterName', 'year_id', 'beginDay', 'endDay'])
    except (Exception) as error:
        print(error)
        messages.error(request, 'Lỗi: Dữ liệu không đúng định dạng.', error)
        return TemplateResponse(request, template)
    return redirect('/adminuet/semester/')
Esempio n. 4
0
def import_page(request):
    """
    Thực hiện đọc file csv để nhập vào DB (không sử dụng)
    Thuộc tính của file csv roleName, roleDescription
    """
    if checkInUrl(request, 'role') is False:
        listFunction = request.user.list_function()
        return HttpResponseRedirect(reverse(listFunction[0]))
    template = 'adminuet/roleimport.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)
        functions = Functions.objects.all()
        # List các roleName để so sanh sự tồn tại
        list_function = []
        for function in functions:
            list_function.append(function.functionName)
        for i, row in df.iterrows():
            roleDes = row['roleDescription']
            # Phân tách các chuỗi string bời dấu , vào list_function
            listToStringRole = roleDes.split(",")
            for itemFunction in listToStringRole:
                # Nếu itemFunction không có trong list_function thì báo lỗi luôn
                if not itemFunction in list_function:
                    messages.error(
                        request,
                        'Lỗi: Trong hệ thống không tồn tại chức năng ' +
                        itemFunction + '.')
                    return TemplateResponse(request, template)
        # Thực hiện ghi dữ liệu
        create_from_DF(df=df,
                       model=Roles,
                       searching_cols=['roleName', 'roleDescription'])
    except (Exception) as error:
        print(error)
        messages.error(request, 'Lỗi: Dữ liệu không đúng định dạng.')
        return TemplateResponse(request, template)
    return redirect('/adminuet/role/')
Esempio n. 5
0
def import_page(request):
    """
    Thực hiện đọc file csv để nhập vào DB
    Hàm xuất từ danh sách năm học ra file csv
    Các trường stt, yearName, active
    """
    if checkInUrl(request, 'year') is False:
        listFunction = request.user.list_function()
        return HttpResponseRedirect(reverse(listFunction[0]))
    template = 'adminuet/yearimport.html'
    if request.method == 'GET':
        return TemplateResponse(request, template)
    try:
        csv_file = request.FILES['document']
    except (Exception) as error:
        print(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")
        for i, row in df.iterrows():
            df.loc[i,
                   'openingDay'] = datetime.strptime(row['openingDay'],
                                                     "%Y-%m-%d").date()

            if str(row['active']).lower() == "kích hoạt":
                df.loc[i, 'active'] = True
            elif str(row['active']).lower() == "không kích hoạt":
                df.loc[i, 'active'] = False
            else:
                df.drop(i)

        year_list = create_from_DF(df=df,
                                   model=Years,
                                   searching_cols=['yearName'])
        for year in year_list:
            auto_generate_semesters(year)
    except Exception as error:
        print(error)
        messages.error(request, 'Lỗi: Dữ liệu không đúng định dạng.')
        return TemplateResponse(request, template)
    return redirect('/adminuet/year/')
def extract_transcript_file(request):
    """
    Extract file điểm csv
    """
    if checkInUrl(request, 'learningoutcome') is False:
        listFunction = request.user.list_function()
        return HttpResponseRedirect(reverse(listFunction[0]))
    file_id = request.POST['file_id']
    transcript_file = DBModel.TranscriptFiles.objects.get(pk=file_id)

    extraction = DataExtraction()
    try:
        extraction.loadData(settings.MEDIA_ROOT + '/' +
                            transcript_file.transcript.name)
    except Exception as e:
        print("error: learningoutcome.py line 40: ", e)
        return False
    # format student info DataFrame
    studentInfo = extraction.getStudentInfo()
    studentInfo['birth'] = pd.to_datetime(studentInfo['birth'])
    # studentInfo = studentInfo.loc[:, ['gender', 'birth']].reset_index()
    # studentInfo['group'] = stg
    # studentInfo.columns = ['MSSV', 'gender', 'birthday', 'group']
    # DBModel.create_from_DF(studentInfo, DBModel.Profiles, searching_cols=['MSSV', 'group'])

    # format course info DataFrame
    courseInfo = extraction.getCourse()
    courseInfo.columns = ['courseCode', 'courseName', 'credit']
    courseInfo['unit_id'] = transcript_file.group.generation.unit_id
    # check and create course
    try:
        course_obj_list = DBModel.create_from_DF(
            courseInfo,
            DBModel.Courses,
            searching_cols=['courseCode', 'unit_id'])
        recommend_semester = DBModel.semester_rank(
            group_id=transcript_file.group_id,
            current_semester_id=transcript_file.semester_id) + 1
        for cou in course_obj_list:
            DBModel.Major_Course.objects.get_or_create(
                course_id=cou.pk,
                major_id=transcript_file.major_id,
                defaults={"semesterRecommended": recommend_semester})
        del recommend_semester
    except Exception as e:
        print(e)
        return False
    course_dict = {cou.courseCode: cou.pk for cou in course_obj_list}

    stu_grade = extraction.getTranscript()
    try:
        for i, row in stu_grade.iterrows():
            # check and create student
            name_arr = studentInfo.loc[i, 'name'].strip().split(' ')
            first_name = name_arr[-1]
            last_name = ' '.join(name_arr[:-1])

            stu, created = DBModel.Profiles.objects.get_or_create(
                MSSV=i,
                group_id=transcript_file.group_id,
                defaults={
                    'gender': studentInfo.loc[i, 'gender'],
                    'firstName': first_name,
                    'lastName': last_name,
                    'birthday': studentInfo.loc[i, 'birth'],
                    'major_id': transcript_file.major_id
                })
            del name_arr, first_name, last_name
            # check and create grade in transcript
            for course_code, grade in row.items():
                if ~np.isnan(grade):
                    # print("not nan", grade)
                    DBModel.Transcript.objects.update_or_create(
                        course_id=course_dict[course_code],
                        student=stu,
                        semester_id=transcript_file.semester_id,
                        defaults={'grade': round(grade, 2)})

            # update gpa
            calculate_student_gpa(stu, 'update')

    except Exception as e:
        print("ERROR ", e.__dir__(), "\n", e)
        return False

    transcript_file.extracted = True
    transcript_file.save()
    return True