|
@@ -22,31 +22,39 @@ class ServiceTypeFilter(admin.SimpleListFilter):
|
|
|
|
|
|
|
|
|
class ServiceStatusFilter(admin.SimpleListFilter):
|
|
|
- title = 'status du service'
|
|
|
+ title = 'statut'
|
|
|
parameter_name = 'status'
|
|
|
|
|
|
def lookups(self, request, model_admin):
|
|
|
return (
|
|
|
+ ('forthcoming', 'Non commencé'),
|
|
|
('ongoing', 'En cours'),
|
|
|
('finished', 'Terminé'),
|
|
|
)
|
|
|
|
|
|
def queryset(self, request, queryset):
|
|
|
+ # Designed with a Karnaugh map, should be correct...
|
|
|
+ now = timezone.now()
|
|
|
+ if self.value() == 'forthcoming':
|
|
|
+ return queryset.filter(Q(start__isnull=True, end__isnull=True) \
|
|
|
+ | Q(start__gt=now))
|
|
|
if self.value() == 'ongoing':
|
|
|
- return queryset.filter(end__isnull=True)
|
|
|
+ return queryset.filter(Q(start__lte=now, end__isnull=True) \
|
|
|
+ | Q(start__lte=now, end__gt=now) \
|
|
|
+ | Q(start__isnull=True, end__gt=now))
|
|
|
if self.value() == 'finished':
|
|
|
- return queryset.filter(end__isnull=False)
|
|
|
+ return queryset.filter(end__lte=now)
|
|
|
|
|
|
|
|
|
class ServiceAdmin(admin.ModelAdmin):
|
|
|
- list_display = ('id', 'adherent', 'service_type', 'start', 'end_view',)
|
|
|
+ list_display = ('id', 'adherent', 'service_type', 'start', 'end', 'status')
|
|
|
list_filter = (ServiceStatusFilter, ServiceTypeFilter,)
|
|
|
inlines = (PaymentInline,)
|
|
|
|
|
|
- def end_view(self, obj):
|
|
|
- return obj.end
|
|
|
- end_view.short_description = 'Fin du service'
|
|
|
- end_view.empty_value_display = 'Service en cours'
|
|
|
+ def status(self, obj):
|
|
|
+ return obj.is_ongoing
|
|
|
+ status.short_description = 'En cours'
|
|
|
+ status.boolean = True
|
|
|
|
|
|
def get_queryset(self, request):
|
|
|
qs = super().get_queryset(request)
|
|
@@ -72,8 +80,10 @@ class InUseFilter(admin.SimpleListFilter):
|
|
|
)
|
|
|
|
|
|
def queryset(self, request, queryset):
|
|
|
- in_use_filter = Q(service__start__gte=timezone.now()) \
|
|
|
- | Q(service__end__isnull=True)
|
|
|
+ now = timezone.now()
|
|
|
+ in_use_filter = (Q(service__start__isnull=True) | Q(service__start__lte=now)) \
|
|
|
+ & (Q(service__end__isnull=True) | Q(service__end__gt=now)) \
|
|
|
+ & (Q(service__start__isnull=True) | Q(service__end__isnull=True))
|
|
|
if self.value() == '0':
|
|
|
return queryset.filter(in_use_filter)
|
|
|
if self.value() == '1':
|