def create(request: HttpRequest) -> HttpResponse: """Render the create page""" if request.META.get('HTTP_REFERER') is None: return redirect('/calendar/') if request.method == 'POST': form = EditForm(request.POST) if form.is_valid(): if is_ajax(request): return render(request, 'popup.html', context={"form": form}) past_conflicts = list(Conflict.objects.all()) professor = form.cleaned_data['professor'].strip().split() professor = get_professor(professor[0], professor[1]) room = get_room(form.cleaned_data['room']) group = get_group(form.cleaned_data['group']) Lesson.objects.get_or_create( name=form.cleaned_data['name'], professor=professor, room=room, group=group, start_time=form.cleaned_data['start_time'], end_time=form.cleaned_data['end_time'] ) db_conflicts() context = generate_full_index_context_with_date(form.cleaned_data['start_time']) current_conflicts = list(context['conflicts']) context.update(generate_context_for_conflicts_report(past_conflicts, current_conflicts)) return render(request, 'index.html', context=context) return render(request, 'popup.html', context={"form": form}) return render(request, 'popup.html', context={"form": EditForm()})
def edit(request: HttpRequest, lesson_id) -> HttpResponse: """Render the edit page""" if request.META.get('HTTP_REFERER') is None: return redirect('/calendar/') if request.method == 'POST': form = EditForm(request.POST) if form.is_valid(): if is_ajax(request): return render(request, 'popup.html', context={"form": form}) past_conflicts = list(Conflict.objects.all()) lesson = Lesson.objects.get(id=form.cleaned_data['id']) lesson.name = form.cleaned_data['name'] professor = form.cleaned_data['professor'].strip().split() lesson.professor = get_professor(professor[0], professor[1]) lesson.room = get_room(form.cleaned_data['room']) lesson.group = get_group(form.cleaned_data['group']) lesson.start_time = form.cleaned_data['start_time'] lesson.end_time = form.cleaned_data['end_time'] lesson.save() db_conflicts() context = generate_full_index_context_with_date(form.cleaned_data['start_time']) current_conflicts = list(context['conflicts']) context.update(generate_context_for_conflicts_report(past_conflicts, current_conflicts)) return render(request, 'index.html', context=context) return render(request, 'popup.html', context={"form": form}) lesson = Lesson.objects.get(id=lesson_id) form = EditForm( initial={'id': lesson.id, 'name': lesson.name, 'professor': lesson.professor, 'room': lesson.room, 'group': lesson.group, 'start_time': lesson.start_time, 'end_time': lesson.end_time}) return render(request, 'popup.html', context={"form": form})
def import_students(data: pd.DataFrame) -> Tuple[int, List[int], List[int]]: """ Parse students data and add to database :param data: DataFrame with students data Accepted format: index_number | name_and_surname | group :return: number of students added """ if len(data.columns) == 3: added_columns = 0 incorrect = [] duplicate = [] for row in data.itertuples(): if row.count(nan) != 0 or not students_check_types(row): incorrect.append(row[0]) continue full_name = row[2].strip().split() if len(full_name) == 2: group = get_group(row[3]) _student, created = Student.objects.get_or_create( name=full_name[0], surname=full_name[1], group=group, index=int(row[1])) if created: added_columns += 1 else: duplicate.append(row[0]) else: incorrect.append(row[0]) continue return added_columns, incorrect, duplicate raise ImportSizeException
def edit_lessons(request: HttpRequest) -> HttpResponse: """Logic for mass edit of conflicts""" if request.method == 'POST': form = MassEditForm(request.POST) if form.is_valid(): changes = {} past_conflicts = list(Conflict.objects.all()) if form.cleaned_data['lesson_name']: changes['name'] = form.cleaned_data['lesson_name'] if form.cleaned_data['professor']: professor = form.cleaned_data['professor'].strip().split() changes['professor'] = get_professor(professor[0], professor[1]) if form.cleaned_data['room']: changes['room'] = get_room(form.cleaned_data['room']) if form.cleaned_data['group']: changes['group'] = get_group(form.cleaned_data['group']) if form.cleaned_data['start_time']: changes['start_time'] = form.cleaned_data['start_time'] if form.cleaned_data['end_time']: changes['end_time'] = form.cleaned_data['end_time'] checks = request.POST.getlist('checks[]') if changes != {}: lessons = Lesson.objects.filter(id__in=checks) lessons.update(**changes) db_conflicts() context_after_edit = generate_full_index_context() current_conflicts = list(context_after_edit['conflicts']) context_after_edit.update( generate_context_for_conflicts_report(past_conflicts, current_conflicts)) return render(request, 'index.html', context=context_after_edit) context: dict = {} context.update(generate_conflicts_context()) context.update(generate_full_schedule_context()) context.update({'form': form}) return render(request, 'index.html', context=context) return index(request)
def import_excel(data: pd.DataFrame) -> Tuple[int, List[int], List[int]]: """ Parse excel data from DataFrame and add to database :param data: consists of complex types for date etc. Date: YYYY-MM-DD Time: HH:MM(:SS) :return: number of lessons added """ added_columns = 0 incorrect = [] duplicate = [] for row in data.itertuples(): if row.count(nan) != 0 or not check_types_excel(row): incorrect.append(row[0]) continue professor_data = row[5].strip().split() if len(professor_data) == 2: try: if isinstance(row[2], str): tmp_time = dt.datetime.strptime(row[2], ("%H:%M:%S" if len( row[2].split(":")) == 3 else "%H:%M")) start_time = dt.timedelta(hours=tmp_time.hour, minutes=tmp_time.minute) tmp_time = dt.datetime.strptime(row[3], ("%H:%M:%S" if len( row[3].split(":")) == 3 else "%H:%M")) end_time = dt.timedelta(hours=tmp_time.hour, minutes=tmp_time.minute) else: start_time = dt.timedelta(hours=row[2].hour, minutes=row[2].minute) end_time = dt.timedelta(hours=row[3].hour, minutes=row[3].minute) if isinstance(row[1], str): date = dt.datetime.strptime(row[1], "%Y-%m-%d") start_date = date + start_time end_date = date + end_time else: start_date = row[1].to_pydatetime() + start_time end_date = row[1].to_pydatetime() + end_time except ValueError: incorrect.append(row[0]) continue if start_date > end_date: incorrect.append(row[0]) continue professor = get_professor(professor_data[0], professor_data[1]) room = get_room(str(row[7])) group = get_group(str(row[6])) _lesson, created = Lesson.objects.get_or_create( name=str(row[4]).strip(), professor=professor, room=room, group=group, start_time=start_date, end_time=end_date) if created: added_columns += 1 else: duplicate.append(row[0]) else: incorrect.append(row[0]) return added_columns, incorrect, duplicate
def import_csv(data: pd.DataFrame) -> Tuple[int, List[int], List[int]]: """ Parse csv data from DataFrame and add to database :param data: consists of simple types (str or int) Date: DD-MM-YY or YYYY-MM-DD Time: HH:MM(:SS) :return: number of lessons added """ added_columns = 0 incorrect = [] duplicate = [] for row in data.itertuples(): if row.count(nan) != 0 or not check_types_csv(row): incorrect.append(row[0]) continue try: date = [val for val in row[1].split("-")] start_t = [val for val in row[2].split(":")] end_t = [val for val in row[3].split(":")] professor_data = row[5].strip().split() if len(date) == 3 and len(start_t) >= 2 and len(end_t) >= 2\ and len(professor_data) == 2: if len(date[0]) == 2: start_date = dt.datetime( int(date[2]) + 2000, int(date[1]), int(date[0]), int(start_t[0]), int(start_t[1])) end_date = dt.datetime( int(date[2]) + 2000, int(date[1]), int(date[0]), int(end_t[0]), int(end_t[1])) elif len(date[0]) == 4: start_date = dt.datetime(int(date[0]), int(date[1]), int(date[2]), int(start_t[0]), int(start_t[1])) end_date = dt.datetime(int(date[0]), int(date[1]), int(date[2]), int(end_t[0]), int(end_t[1])) else: incorrect.append(row[0]) continue if start_date > end_date: incorrect.append(row[0]) continue professor = get_professor(professor_data[0], professor_data[1]) room = get_room(str(row[7])) group = get_group(str(row[6])) _lesson, created = Lesson.objects.get_or_create( name=str(row[4]).strip(), professor=professor, room=room, group=group, start_time=start_date, end_time=end_date) if created: added_columns += 1 else: duplicate.append(row[0]) else: incorrect.append(row[0]) except ValueError: incorrect.append(row[0]) continue return added_columns, incorrect, duplicate