admin.py 3.0 KB

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