Beispiel #1
0
def all_quick(request):
    monday = getMonday(date.today())
    sunday = monday + timedelta(days=6)
    
    templateData = getTemplateData(request, advisor=None, unassigned=False, monday=monday)
    
    return render(request, "enrichmentmanager/assign_all.html", templateData)
Beispiel #2
0
def getTemplateData(request, advisor, unassigned, monday):
    sunday = monday + timedelta(days=6)
    
    slots = EnrichmentSlot.objects.filter(date__gte=monday).filter(date__lte=sunday).order_by('date')
    
    if advisor:
        students = Student.objects.filter(advisor=advisor)
    else:
        students = Student.objects.all()
    
    #This can probably be done directly on the DB server
    if unassigned:
        unassignedStudentIDs = set()
        
        for student in students:
            if student.id in unassignedStudentIDs:
                continue
            
            if student.lockout:
                continue
            
            for slot in slots:
                try:
                    EnrichmentSignup.objects.get(student=student, slot=slot)
                except EnrichmentSignup.DoesNotExist:
                    unassignedStudentIDs.add(student.id)
        
        #This is ineffecient, but it guarantees that I get a QuerySet back out, as opposed to working on a list later on
        students = Student.objects.filter(id__in=unassignedStudentIDs)
    
    students = students.order_by('academic_student__last_name', 'academic_student__first_name')
    
    slotChoices = {}
    for slot in slots:
        slotChoices[slot] = EnrichmentOption.objects.filter(slot=slot).prefetch_related('teacher').order_by('teacher__academic_teacher__last_name', 'teacher__academic_teacher__first_name').all()
    
    #This is an extra query if we're grabbing the unassigned set    
    relatedSignups = {}
    for enrichmentSignup in EnrichmentSignup.objects.filter(slot__in=slots, student__in=students).prefetch_related('student', 'slot'):
        key = "slot_{slot_id}_{student_id}".format(slot_id=enrichmentSignup.slot.id, student_id=enrichmentSignup.student.id)
        relatedSignups[key] = enrichmentSignup.enrichment_option.id
    
    slotOptions = EnrichmentSlot.objects.filter(date__gte=date.today())
    weekOptions = set()
    
    for slotOption in slotOptions:
        weekOptions.add(getMonday(slotOption.date))
    
    data = {
        'currentDate': date(monday.year, monday.month, monday.day),
        'slots': slots,
        'students': students,
        'advisors': Teacher.objects.exclude(student=None).order_by('academic_teacher__last_name', 'academic_teacher__first_name').all(),
        'weekOptions': sorted(weekOptions),
        'currentAdvisor': advisor,
        'slotChoices': slotChoices,
        'relatedSignups': relatedSignups,
    }
    
    return data
Beispiel #3
0
def unassigned_explicit(request, year, month, day):
    year, month, day = map(int, (year, month, day))
    monday = getMonday(date(year, month, day))
    sunday = monday + timedelta(days=6)
    
    templateData = getTemplateData(request, advisor=None, unassigned=True, monday=monday)
    
    return render(request, "enrichmentmanager/assign_unassigned.html", templateData)
Beispiel #4
0
def advisor_quick(request):
    #Get our next date
    nextDate = EnrichmentSlot.objects.filter(date__gte=date.today()).aggregate(Min('date'))['date__min']
    monday = getMonday(nextDate)
    sunday = monday + timedelta(days=6)
    
    currentUser = request.user
    
    #TODO: Handle case of advisor not found
    advisor = Teacher.objects.get(academic_teacher__email=currentUser.email)
    
    templateData = getTemplateData(request, advisor=advisor, unassigned=False, monday=monday)
    
    return render(request, "enrichmentmanager/assign_advisor.html", templateData)
Beispiel #5
0
def advisor_explicit(request, advisor, year, month, day):
    year, month, day = map(int, (year, month, day))
    monday = getMonday(date(year, month, day))
    sunday = monday + timedelta(days=6)
    
    if not request.user.is_authenticated():
        return redirect('%s?next=%s' % (settings.LOGIN_URL, request.path))
    
    advisor = Teacher.objects.get(pk=advisor)
    
    if request.user.email == advisor.email and request.user.has_perm("enrichmentmanager.can_view_own_advisees"):
        templateData = getTemplateData(request, advisor=advisor, unassigned=False, monday=monday)
        return render(request, "enrichmentmanager/assign_advisor.html", templateData)
    
    elif request.user.has_perm("enrichmentmanager.can_view_other_advisees"):
        templateData = getTemplateData(request, advisor=advisor, unassigned=False, monday=monday)
        return render(request, "enrichmentmanager/assign_advisor.html", templateData)
    
    return redirect('%s?next=%s' % (settings.LOGIN_URL, request.path))
Beispiel #6
0
def all_explicit(request, year, month, day):
    year, month, day = map(int, (year, month, day))
    monday = getMonday(date(year, month, day))
    sunday = monday + timedelta(days=6)
    
    templateData = getTemplateData(request, advisor=None, unassigned=False, monday=monday)
    templateData['allowSlotSort'] = True
    
    #This is horrible ineffecient, but it does solve the quick reassignment issue...
    if request.GET.get("sort"):
        def getKey(student):
            option = EnrichmentOption.objects.filter(slot__id=request.GET['sort'], students=student).first()
            
            if option:
                return (option.teacher.last_name, option.teacher.first_name)
            
            return ("", "")
        
        templateData['students'] = sorted(templateData['students'], key=getKey)
        
    
    return render(request, "enrichmentmanager/assign_all.html", templateData)