12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970 |
- from django.contrib import admin
- from django.contrib.contenttypes.admin import GenericTabularInline
- from django.contrib.contenttypes.models import ContentType
- from django.db.models import Q
- from services.models import Service
- from .models import Payment
- class PaymentMixin:
- def get_fields(self, request, obj=None):
- fields = ('amount', 'period', 'payment_method', 'date',)
- if request.user.is_superuser or request.user.has_perm('banking.validate_payment'):
- fields += ('validated',)
- return fields
- def get_queryset(self, request):
- qs = super().get_queryset(request)
- if request.user.is_superuser or request.user.has_perm('banking.validate_payment'):
- return qs
- # Show only adherent contribution and payment related to a service for which the user is in managment group.
- user_ctype = ContentType.objects.get(app_label='adhesions', model='adherent')
- return qs.filter(Q(reason_type=user_ctype) | Q(service__service_type__group__in=request.user.groups.all()))
- class PaymentInlineMixin(PaymentMixin, GenericTabularInline):
- model = Payment
- ct_field = 'reason_type'
- ct_fk_field = 'reason_id'
- class ValidatedPaymentInline(PaymentInlineMixin):
- extra = 0
- verbose_name_plural = 'Paiements validés'
- def get_readonly_fields(self, request, obj=None):
- return self.get_fields(request, obj)
- def has_add_permission(self, request):
- return False
- def has_delete_permission(self, request, obj=None):
- return request.user.has_perm('banking.validate_payment')
- def get_queryset(self, request):
- return super().get_queryset(request).filter(validated=True)
- class PendingOrNewPaymentInline(PaymentInlineMixin):
- extra = 1
- verbose_name_plural = 'Paiements en attente de validation et nouveaux paiements'
- def get_queryset(self, request):
- return super().get_queryset(request).filter(validated=False)
- class PaymentAdmin(PaymentMixin, admin.ModelAdmin):
- list_display = ('reason_verbose', 'amount', 'period', 'payment_method', 'validated',)
- list_filter = ('payment_method', 'validated',)
- def has_change_permission(self, request, obj=None):
- if obj and not request.user.is_superuser:
- return not obj.validated
- return True
- def has_add_permission(self, request):
- return False
- admin.site.register(Payment, PaymentAdmin)
|