# -*- coding: utf-8 -*-
import csv
import datetime
+from teleforma.admin_filter import MultipleChoiceListFilter
from teleforma.models.chat import ChatMessage
from django.contrib import admin
return queryset.filter(balance__gt=0)
else:
return queryset
+class TrainingsFilter(MultipleChoiceListFilter):
+ title = 'Formations'
+ parameter_name = 'trainings__in'
+ def lookups(self, request, model_admin):
+ return [(training.id, str(training)) for training in Training.objects.all()]
class StudentAdmin(admin.ModelAdmin):
model = Student
inlines = [PaymentInline, OptionalFeeInline, DiscountInline, PaybackInline]
search_fields = ['user__first_name', 'user__last_name', 'user__username']
list_filter = ['user__is_active', 'restricted', 'is_subscribed', 'platform_only', PeriodListFilter,
- 'trainings', 'iej', 'procedure', 'written_speciality', 'oral_speciality',
+ TrainingsFilter, 'iej', 'procedure', 'written_speciality', 'oral_speciality',
'oral_1', 'oral_2', 'fascicule', BalanceFilter]
list_display = ['student_name', 'restricted', 'get_trainings', 'platform_only',
'total_payments', 'total_fees', 'balance', 'balance_intermediary']
--- /dev/null
+
+from django.contrib import admin
+
+
+class MultipleChoiceListFilter(admin.SimpleListFilter):
+ template = 'admin/multiselect.html'
+
+
+ def __init__(self, request, params, model, model_admin):
+ super().__init__(request, params, model, model_admin)
+ self.used_parameters[self.parameter_name] = request.GET.getlist(self.parameter_name) or []
+ lookup_choices = self.lookups(request, model_admin)
+ if lookup_choices is None:
+ lookup_choices = ()
+ self.lookup_choices = list(lookup_choices)
+
+
+ def lookups(self, request, model_admin):
+ """
+ Must be overridden to return a list of tuples (value, verbose value)
+ """
+ raise NotImplementedError(
+ 'The MultipleChoiceListFilter.lookups() method must be overridden to '
+ 'return a list of tuples (value, verbose value).'
+ )
+
+ def queryset(self, request, queryset):
+ if request.GET.get(self.parameter_name):
+ kwargs = {self.parameter_name: request.GET.getlist(self.parameter_name)}
+ queryset = queryset.filter(**kwargs)
+ return queryset
+
+
+ def choices(self, changelist):
+
+ for lookup, title in self.lookup_choices:
+ yield {
+ 'selected': self.value() and str(lookup) in self.value(),
+ 'query_string': changelist.get_query_string({self.parameter_name: lookup}),
+ 'display': title,
+ }
\ No newline at end of file
--- /dev/null
+
+{% comment %} {{ choices }} {% endcomment %}
+
+<div class="form-group" style="max-width: 100%;">
+ <select class="form-control {{ field_name }}_select2" name="{{ field_name }}" data-name="{{ field_name }}" style="width: 100%;max-width: 80%;" tabindex="-1" aria-hidden="true" multiple>
+
+ {% for choice in choices %}
+ <option value="{{ choice.value }}" {% if choice.selected %}selected{% endif %}>{{ choice.display }}</option>
+ {% endfor %}
+</select>
+
+<script>
+ document.addEventListener("DOMContentLoaded", function(event) {
+ jQuery(".{{ field_name }}_select2").select2({
+ placeholder: "{{ title }}",
+ width: 'resolve',
+ closeOnSelect: false,
+ dropdownAutoWidth: true,
+ });
+ });
+</script>
+
+</div>
\ No newline at end of file