admin.py 3.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. from django.contrib import admin
  2. from django.db.models import Q
  3. from django.utils import timezone
  4. from .models import Service, ServiceType, IPResource
  5. from banking.admin import ValidatedPaymentInline, PendingOrNewPaymentInline
  6. class ServiceTypeFilter(admin.SimpleListFilter):
  7. title = 'type de service'
  8. parameter_name = 'type'
  9. def lookups(self, request, model_admin):
  10. service_types = ServiceType.objects.all()
  11. if not request.user.is_superuser:
  12. service_types = service_types.filter(group=request.user.groups.all())
  13. return service_types.values_list('pk', 'name')
  14. def queryset(self, request, queryset):
  15. if self.value():
  16. return queryset.filter(service_type__pk=self.value())
  17. class ServiceStatusFilter(admin.SimpleListFilter):
  18. title = 'statut'
  19. parameter_name = 'status'
  20. def lookups(self, request, model_admin):
  21. return (
  22. ('forthcoming', 'Non commencé'),
  23. ('ongoing', 'En cours'),
  24. ('finished', 'Terminé'),
  25. )
  26. def queryset(self, request, queryset):
  27. now = timezone.now()
  28. if self.value() == 'forthcoming':
  29. return queryset.filter(Service.get_forthcoming_filter())
  30. if self.value() == 'ongoing':
  31. return queryset.filter(Service.get_ongoing_filter())
  32. if self.value() == 'finished':
  33. return queryset.filter(Service.get_finished_filter())
  34. class ServiceAdmin(admin.ModelAdmin):
  35. list_display = ('id', 'adherent', 'service_type', 'start', 'end', 'status')
  36. list_filter = (ServiceStatusFilter, ServiceTypeFilter,)
  37. inlines = (ValidatedPaymentInline, PendingOrNewPaymentInline,)
  38. def status(self, obj):
  39. return obj.is_ongoing
  40. status.short_description = 'En cours'
  41. status.boolean = True
  42. def get_queryset(self, request):
  43. qs = super().get_queryset(request)
  44. if request.user.is_superuser:
  45. return qs
  46. return qs.filter(service_type__group__in=request.user.groups.all())
  47. def get_readonly_fields(self, request, obj=None):
  48. fields = super().get_readonly_fields(request, obj)
  49. if not request.user.is_superuser:
  50. return fields + ('service_type', 'ip_resources',)
  51. return fields
  52. class InUseFilter(admin.SimpleListFilter):
  53. title = 'disponibilité'
  54. parameter_name = 'available'
  55. def lookups(self, request, model_admin):
  56. return (
  57. (1, 'Disponible'),
  58. (0, 'Non disponible'),
  59. )
  60. def queryset(self, request, queryset):
  61. ongoing_filter = Service.get_ongoing_filter()
  62. if self.value() == '0':
  63. return queryset.filter(ongoing_filter)
  64. if self.value() == '1':
  65. return queryset.exclude(ongoing_filter)
  66. class IPResourceAdmin(admin.ModelAdmin):
  67. list_display = ('__str__', 'in_use_view')
  68. list_filter = (InUseFilter,)
  69. def in_use_view(self, obj):
  70. return not obj.in_use
  71. in_use_view.short_description = 'Disponible'
  72. in_use_view.boolean = True
  73. admin.site.register(Service, ServiceAdmin)
  74. admin.site.register(ServiceType)
  75. admin.site.register(IPResource, IPResourceAdmin)