def schedule_view(request, identifier): query = ScheduleEntry.objects.filter(identifier=identifier) courses = schedule_get_courses(query) credits_min = 0 credits_max = 0 desc = None if len(query) > 0: desc = str(len(query)) + (" courses: " if len(query) > 1 else " course: ") term = query[0].term user = query[0].user profile = Profile.objects.get(user=user) name = (profile.preferred_name if profile.preferred_name else user.first_name) + " " + user.last_name for course in courses: if course is None: courses.remove(course) else: value = course.hours desc += course.title + ", " credits_min += int(value[:1]) if len(value) > 1: credits_max += int(value[4:]) desc = desc[:-2] else: raise Http404("Schedule does not exist") if credits_max > 0: credits_max = credits_min + credits_max table = ScheduleTable(courses) RequestConfig(request).configure(table) context = { 'table': table, 'social_desc': desc, 'term': term, 'schedule_user': user, 'schedule_profile': profile, 'schedule_name': name, 'by_id': True, 'identifier': identifier, 'credits_min': credits_min, 'credits_max': credits_max, } if user != request.user and request.user.is_authenticated(): context['user_courses'] = schedule_get_courses(ScheduleEntry.objects.filter(user=request.user)) context['profile'] = Profile.objects.get(user=request.user) return render(request, 'schedule/course_schedule.html', context)
def start_setup(request): current_term = Term.objects.get(value=settings.SYNC_TERM) query = ScheduleEntry.objects.filter(term=current_term, user=request.user) courses = schedule_get_courses(query) context = { 'current_term': current_term, 'courses': courses, } return render(request, 'start_setup.html', context)
def search(request): profile = Profile.objects.get(user=request.user) if not profile.orientation: return HttpResponseForbidden() results = [] if request.method == 'POST': form = SearchForm(request.POST) if form.is_valid(): search_course = form.cleaned_data['course'] search_instructor = form.cleaned_data['instructor'] profiles = Profile.objects.filter(orientation=True) for profile in profiles: courses = schedule_get_courses(ScheduleEntry.objects.filter(user=profile.user)) for course in courses: add = False if search_course: match = re.search(r'([A-z]+?)([0-9]+)', search_course) if match: search_course = match.group(1) + ' ' + match.group(2) if search_course in course.course: add = True else: add = False if search_instructor: if search_instructor in course.instructor.last_name: add = True else: add = False if add: results.append({ 'user': profile.user, 'profile': profile, 'course': course }) else: form = SearchForm() context = { 'results': results, 'form' : form } return render(request, 'orientation/search.html', context)
def exam_schedule(request, termid): term = Term.objects.get(value=termid) query = ScheduleEntry.objects.filter(user=request.user, term=term) courses = schedule_get_courses(query) exams = [] first_exam = None for course in courses: if course is None: courses.remove(course) else: exam = exam_for_course(course) if exam: start = exam.exam_start_time end = exam.exam_end_time exams.append({ 'course': course.course, 'crn': course.crn, 'title': course.title, 'date': exam.exam_date, 'start_time': start, 'end_time': end }) if not first_exam or exam.exam_date < first_exam: first_exam = exam.exam_date hash = hashlib.md5(b'%s:%s' % (str(request.user.username), str(term.name))).hexdigest()[:15] table = ExamTable(exams) RequestConfig(request).configure(table) context = { 'source': ExamSource.objects.get(term=term), 'term': term, 'table': table, 'first_exam': first_exam.strftime('%Y-%m-%d'), 'identifier': hash, 'authenticated': True, } return render(request, 'schedule/exam_schedule.html', context)
def schedule_calendar(request): if request.method == 'GET': # Requests will include a 'start' value which is a Monday delta = datetime.timedelta(days=1) MON = datetime.datetime.strptime(request.GET['start'], "%Y-%m-%d") TUE = MON + delta WED = TUE + delta THU = WED + delta FRI = THU + delta SAT = FRI + delta use_color = True if 'color' in request.GET: use_color = request.GET['color'] == 'true' query = ScheduleEntry.objects.filter(identifier=request.GET['identifier']).order_by('course_crn') courses = schedule_get_courses(query) colors = get_colors_for_courses(courses) events = [] for course in courses: for meeting_time in course.meeting_times.all(): for day in list(meeting_time.days): day = MON if day == 'M' else TUE if day == 'T' else WED if day == 'W' else THU if day == 'R' else FRI if day == 'F' else SAT start = datetime.datetime.combine(day, meeting_time.start_time).isoformat() end = datetime.datetime.combine(day, meeting_time.end_time).isoformat() event = { 'id': str(course.crn), 'title': course.course, 'start': start, 'end': end, 'url': '/course/' + str(course.term.value) + '/' + str(course.crn) + '/', } if use_color: event['color'] = colors[course] events.append(event) days = SafeString(json.dumps(events)) return HttpResponse(days, 201) else: return HttpResponse('Method not allowed', 405)
def schedule(request): if request.method == 'POST': form = ScheduleForm(request.POST) if form.is_valid(): term = form.cleaned_data['term'] else: if 'term' in request.GET: term = Term.objects.get(value=request.GET['term']) else: profile = Profile.objects.get(user=request.user) if profile.default_term: term = profile.default_term else: term = Term.objects.all()[0] form = ScheduleForm() form.fields['term'].initial = term query = ScheduleEntry.objects.filter(user=request.user, term=term) courses = schedule_get_courses(query) hash = hashlib.md5(b'%s:%s' % (str(request.user.username), str(term.name))).hexdigest()[:15] share_url = request.build_absolute_uri('/schedule/' + hash + '/') credits_min = 0 credits_max = 0 invalid_courses = [] if len(query) > 0: term = query[0].term user = query[0].user for entry in query: course = schedule_get_course(entry) if course is None: invalid_courses.append(entry) courses.remove(course) else: value = course.hours credits_min += int(value[:1]) if len(value) > 1: credits_max += int(value[4:]) if credits_max > 0: credits_max = credits_min + credits_max has_exams = False try: ExamSource.objects.get(term=term) has_exams = True except ExamSource.DoesNotExist: has_exams = False table = ScheduleTable(courses) print_table = SchedulePrintTable(courses) RequestConfig(request).configure(table) RequestConfig(request).configure(print_table) context = { 'table': table, 'print_table': print_table, 'form': form, 'term': term, 'authenticated': True, 'by_id': False, 'identifier': hash, 'share': len(query) > 0, 'share_url': share_url, 'credits_min': credits_min, 'credits_max': credits_max, 'invalid_courses': invalid_courses, 'has_exams': has_exams, } return render(request, 'schedule/course_schedule.html', context)
def schedule(request): term = Term.objects.all()[0] profile = Profile.objects.get(user=request.user) if request.method == 'POST': form = ScheduleForm(request.user, request.POST) if form.is_valid(): term = form.cleaned_data['term'] else: if 'term' in request.GET: term = Term.objects.get(value=request.GET['term']) else: term = Term.objects.all()[0] if profile.default_term: term = profile.default_term form = ScheduleForm(request.user) form.fields['term'].initial = term options_form = ScheduleOptionsForm() options_form.fields['show_colors'].initial = profile.show_colors_schedule options_form.fields['show_details'].initial = profile.show_details_schedule query = ScheduleEntry.objects.filter(user=request.user, term=term).order_by('course_crn') if len(query) is 0: temp = ScheduleEntry.objects.filter(user=request.user) if len(temp) > 0: term = schedule_get_course(temp[0]).term query = ScheduleEntry.objects.filter(user=request.user, term=term).order_by('course_crn') courses = schedule_get_courses(query) hash = get_identifier(request.user, term) share_url = request.build_absolute_uri('/schedule/' + hash + '/') credits_min = 0 credits_max = 0 time_min = datetime.time(8, 0, 0) time_max = datetime.time(18, 0, 0) show_sat = False invalid_courses = [] deleted_courses = [] if len(query) > 0: term = query[0].term user = query[0].user for entry in query: course = schedule_get_course(entry) if course is None: invalid_courses.append(entry) courses.remove(course) else: if course.deleted: deleted_courses.append(course) value = course.hours credits_min += int(value[:1]) meeting_time = course.primary_meeting_time if meeting_time is not None: if meeting_time.start_time < time_min: time_min = meeting_time.start_time if meeting_time.end_time > time_max: time_max = meeting_time.end_time if 'S' in meeting_time.days: show_sat = True if len(value) > 1: credits_max += int(value[4:]) if credits_max > 0: credits_max = credits_min + credits_max time_min = time_min.strftime('%H:%M:%S') time_max = time_max.strftime('%H:%M:%S') has_exams = False try: source = ExamSource.objects.get(term=term) has_exams = source.active except ExamSource.DoesNotExist: has_exams = False colors = get_colors_for_courses(courses) print_table = SchedulePrintTable(courses) RequestConfig(request).configure(print_table) context = { 'courses': courses, 'course_colors': colors, 'print_table': print_table, 'form': form, 'options_form': options_form, 'term': term, 'authenticated': True, 'identifier': hash, 'has_courses': len(query) > 0, 'share_url': share_url, 'credits_min': credits_min, 'credits_max': credits_max, 'time_min': time_min, 'time_max': time_max, 'show_sat': show_sat, 'invalid_courses': invalid_courses, 'deleted_courses': deleted_courses, 'has_exams': has_exams, } return render(request, 'schedule/schedule.html', context)
def schedule_view(request, identifier): query = ScheduleEntry.objects.filter(identifier=identifier) courses = schedule_get_courses(query) time_min = datetime.time(8, 0, 0) time_max = datetime.time(0, 0, 0) credits_min = 0 credits_max = 0 show_sat = False desc = None if len(query) > 0: desc = str(len(query)) + (" courses: " if len(query) > 1 else " course: ") term = query[0].term user = query[0].user profile = Profile.objects.get(user=user) name = (profile.preferred_name if profile.preferred_name else user.first_name) + " " + user.last_name for course in courses: if course is None: courses.remove(course) else: value = course.hours desc += course.title + ", " credits_min += int(value[:1]) meeting_time = course.primary_meeting_time if meeting_time is not None: if meeting_time.start_time < time_min: time_min = meeting_time.start_time if meeting_time.end_time > time_max: time_max = meeting_time.end_time if 'S' in meeting_time.days: show_sat = True if len(value) > 1: credits_max += int(value[4:]) desc = desc[:-2] else: raise Http404("Schedule does not exist") if credits_max > 0: credits_max = credits_min + credits_max time_min = time_min.strftime('%H:%M:%S') time_max = time_max.strftime('%H:%M:%S') table = ScheduleTable(courses) RequestConfig(request).configure(table) context = { 'courses': courses, 'table': table, 'social_desc': desc, 'term': term, 'schedule_user': user, 'schedule_profile': profile, 'schedule_name': name, 'identifier': identifier, 'credits_min': credits_min, 'credits_max': credits_max, 'show_sat': show_sat, 'time_min': time_min, 'time_max': time_max, } if user != request.user and request.user.is_authenticated(): context['user_courses'] = schedule_get_courses(ScheduleEntry.objects.filter(user=request.user, term=term)) context['profile'] = Profile.objects.get(user=request.user) return render(request, 'schedule/schedule_share.html', context)