|
@@ -1,29 +1,67 @@
|
|
|
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 PaymentInline(GenericTabularInline):
|
|
|
+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'
|
|
|
- extra = 1
|
|
|
|
|
|
|
|
|
-class PaymentAdmin(admin.ModelAdmin):
|
|
|
- list_display = ('reason_verbose', 'amount', 'period', 'payment_method',)
|
|
|
- list_filter = ('payment_method',)
|
|
|
- fields = ('amount', 'period', 'payment_method',)
|
|
|
+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):
|
|
|
- qs = super().get_queryset(request)
|
|
|
- if request.user.is_superuser:
|
|
|
- return qs
|
|
|
- # Show only payment related to a service for which the user is in managment group.
|
|
|
- return qs.filter(service__service_type__group__in=request.user.groups.all())
|
|
|
+ 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
|