admin.py 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. from django.contrib import admin
  2. from django.contrib.contenttypes.admin import GenericTabularInline
  3. from django.contrib.contenttypes.models import ContentType
  4. from django.db.models import Q
  5. from services.models import Service
  6. from .models import Payment
  7. class PaymentMixin:
  8. def get_fields(self, request, obj=None):
  9. fields = ('amount', 'period', 'payment_method', 'date',)
  10. if request.user.is_superuser or request.user.has_perm('banking.validate_payment'):
  11. fields += ('validated',)
  12. return fields
  13. def get_queryset(self, request):
  14. qs = super().get_queryset(request)
  15. if request.user.is_superuser or request.user.has_perm('banking.validate_payment'):
  16. return qs
  17. # Show only adherent contribution and payment related to a service for which the user is in managment group.
  18. user_ctype = ContentType.objects.get(app_label='adhesions', model='adherent')
  19. return qs.filter(Q(reason_type=user_ctype) | Q(service__service_type__group__in=request.user.groups.all()))
  20. class PaymentInlineMixin(PaymentMixin, GenericTabularInline):
  21. model = Payment
  22. ct_field = 'reason_type'
  23. ct_fk_field = 'reason_id'
  24. class ValidatedPaymentInline(PaymentInlineMixin):
  25. extra = 0
  26. verbose_name_plural = 'Paiements validés'
  27. def get_readonly_fields(self, request, obj=None):
  28. return self.get_fields(request, obj)
  29. def has_add_permission(self, request):
  30. return False
  31. def has_delete_permission(self, request, obj=None):
  32. return request.user.has_perm('banking.validate_payment')
  33. def get_queryset(self, request):
  34. return super().get_queryset(request).filter(validated=True)
  35. class PendingOrNewPaymentInline(PaymentInlineMixin):
  36. extra = 1
  37. verbose_name_plural = 'Paiements en attente de validation et nouveaux paiements'
  38. def get_queryset(self, request):
  39. return super().get_queryset(request).filter(validated=False)
  40. class PaymentAdmin(PaymentMixin, admin.ModelAdmin):
  41. list_display = ('reason_verbose', 'amount', 'period', 'payment_method', 'validated',)
  42. list_filter = ('payment_method', 'validated',)
  43. def has_change_permission(self, request, obj=None):
  44. if obj and not request.user.is_superuser:
  45. return not obj.validated
  46. return True
  47. def has_add_permission(self, request):
  48. return False
  49. admin.site.register(Payment, PaymentAdmin)