Skip to content

Commit

Permalink
Instructor training workflow
Browse files Browse the repository at this point in the history
  • Loading branch information
chrismedrela committed Jul 10, 2016
1 parent beaf09b commit 0b23d84
Show file tree
Hide file tree
Showing 16 changed files with 1,345 additions and 79 deletions.
3 changes: 2 additions & 1 deletion workshops/admin.py
Expand Up @@ -9,7 +9,7 @@
Lesson,
KnowledgeDomain,
Badge,
)
TrainingRequirement)


class RoleAdmin(admin.ModelAdmin):
Expand All @@ -24,3 +24,4 @@ class RoleAdmin(admin.ModelAdmin):
admin.site.register(Lesson)
admin.site.register(KnowledgeDomain)
admin.site.register(Badge)
admin.site.register(TrainingRequirement)
124 changes: 123 additions & 1 deletion workshops/filters.py
@@ -1,3 +1,7 @@
from django.db.models import Q

from django.forms import widgets

import django.forms.widgets

import django_filters
Expand All @@ -15,7 +19,7 @@
InvoiceRequest,
EventSubmission,
DCSelfOrganizedEventRequest,
)
TrainingRequest)

EMPTY_SELECTION = (None, '---------')

Expand Down Expand Up @@ -207,6 +211,124 @@ def get_order_by(self, order_value):
return super().get_order_by(order_value)


def filter_all_persons(queryset, all_persons):
if all_persons:
return queryset
else:
return queryset.filter(
task__role__name='learner',
task__event__tags__name='TTT').distinct()


def filter_trainee_name(queryset, name):
return queryset.filter(Q(personal__icontains=name) |
Q(family__icontains=name) |
Q(email__icontains=name) |
Q(github__icontains=name))


def filter_unevaluated_homework(queryset, flag):
if flag is None:
return queryset
elif flag: # return only trainees with an unevaluated homework
return queryset.filter(trainingprogress__state='n') \
.distinct()
else: # return only trainees without unevaluated homework
return queryset.exclude(trainingprogress__state='n') \
.distinct()


class TraineeFilter(FilterSetWithoutHelpText):
search = django_filters.CharFilter(
action=filter_trainee_name,
label='Name or GitHub or email')

all_persons = django_filters.BooleanFilter(
label='Include all people, not only trainees',
action=filter_all_persons,
widget=widgets.CheckboxInput)

is_swc_instructor = django_filters.BooleanFilter(
label='Is SWC Instructor?',
name='is_swc_instructor',
)

is_dc_instructor = django_filters.BooleanFilter(
label='Is DC Instructor?',
name='is_dc_instructor',
)

non_evaluated_homework = django_filters.BooleanFilter(
label='Unevaluated homework?',
action=filter_unevaluated_homework,
)

class Meta:
model = Person
fields = [
'search',
'all_persons',
'is_swc_instructor',
'is_dc_instructor',
]
order_by = ["-last_login", "lastname", "-lastname", "firstname", "-firstname",
"email", "-email"]

def get_order_by(self, order_value):
if order_value == 'firstname':
return ['personal', 'middle', 'family']
elif order_value == '-firstname':
return ['-personal', '-middle', '-family']
elif order_value == 'lastname':
return ['family', 'middle', 'personal']
elif order_value == '-lastname':
return ['-family', '-middle', '-personal']
else:
return super().get_order_by(order_value)


def filter_matched(queryset, choice):
if choice == '':
return queryset
elif choice == 'u': # unmatched
return queryset.filter(person=None)
elif choice == 'p': # matched person, unmatched training
return queryset.filter(person__isnull=False)\
.exclude(person__task__role__name='learner',
person__task__event__tags__name='TTT')\
.distinct()
else:
assert choice == 't' # matched person and training
return queryset.filter(person__task__role__name='learner',
person__task__event__tags__name='TTT')\
.distinct()


class TrainingRequestFilter(FilterSetWithoutHelpText):
state = django_filters.ChoiceFilter(
choices=(('', 'All'),) + TrainingRequest.STATES,
)

matched = django_filters.ChoiceFilter(
label='Matched?',
choices=(
('', 'Unknown'),
('u', 'Unmatched'),
('p', 'Matched person, unmatched training'),
('t', 'Matched person and training'),
),
action=filter_matched,
)

class Meta:
model = TrainingRequest
fields = [
'state',
'matched',
]
order_by = ['created_at', '-created_at']


class TaskFilter(FilterSetWithoutHelpText):
class Meta:
model = Task
Expand Down

0 comments on commit 0b23d84

Please sign in to comment.