123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172 |
- 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 django.core.urlresolvers import reverse
- from services.models import ServiceType
- from .models import Payment
- ### Inlines
- class PaymentInline(GenericTabularInline):
- model = Payment
- ct_field = 'reason_type'
- ct_fk_field = 'reason_id'
- extra = 0
- #max_num = 0
- fields = ('amount', 'period', 'payment_method', 'start', 'end',)
- #readonly_fields = ('amount', 'period', 'payment_method', 'start',)
- verbose_name_plural = 'Contributions'
- #def get_queryset(self, request):
- # # Paiement récurrent en cours (sans date de fin)
- # return super().get_queryset(request).filter(period__gt=0, end__isnull=True)
- #def has_delete_permission(self, request, obj=None):
- # return False
- #class ValidatedPaymentInline(PaymentInline):
- # extra = 0
- # verbose_name_plural = 'Paiements validés'
- #
- # def get_readonly_fields(self, request, obj=None):
- # if request.user.has_perm('banking.validate_payment'):
- # return ()
- # else:
- # 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(PaymentInline):
- # verbose_name_plural = 'Paiements en attente de validation et nouveaux paiements'
- #
- # def get_queryset(self, request):
- # return super().get_queryset(request).filter(validated=False)
- ### Filters
- class PaymentTypeFilter(admin.SimpleListFilter):
- title = 'type de paiement'
- parameter_name = 'type'
- def lookups(self, request, model_admin):
- choices = [
- ('membership', 'Cotisation'),
- ('service', 'Service'),
- ]
- service_types = ServiceType.objects.all()
- if not (request.user.is_superuser or request.user.has_perm('banking.validate_payment')):
- service_types = service_types.filter(group__in=request.user.groups.all())
- for stype in service_types:
- choices.append((stype.pk, 'Service (%s)' % stype.name))
- return choices
- def queryset(self, request, queryset):
- if self.value() == 'membership':
- return queryset.filter(reason_type__app_label='adhesions',
- reason_type__model='adhesion')
- if self.value() == 'service':
- return queryset.filter(reason_type__app_label='services',
- reason_type__model='service')
- try:
- service_type = ServiceType.objects.get(pk=int(self.value()))
- except (ValueError, TypeError, ServiceType.DoesNotExist,):
- return queryset
- else:
- return queryset.filter(service__service_type=service_type)
- #### Actions
- #
- #def validate_payment(payment, request, queryset):
- # queryset.update(validated=True)
- ### ModelAdmin
- class PaymentAdmin(admin.ModelAdmin):
- list_display = ('id', 'type_verbose', 'get_adhesion', 'amount', 'period', 'start_display', 'end_display',)
- # #list_display_links = None
- list_filter = (PaymentTypeFilter, 'payment_method', 'validated',)
- #
- # def get_list_display(self, request):
- # list_display = ()
- # #if request.user.has_perm('auth.change_user'):
- # # list_display += ('adherent_link',)
- # #else:
- # #list_display += ('get_adherent',)
- # list_display += ('payment_type_verbose', 'get_adherent', 'amount',
- # 'period', 'payment_method', 'start_display', 'end_display', 'validated_display',)
- # #if request.user.has_perm('banking.validate_payment'):
- # # list_display += ('change',)
- # #else:
- # # list_display += ('change_pending',)
- # return list_display
- #
- def start_display(self, obj):
- return obj.start
- start_display.short_description = 'Début'
- def end_display(self, obj):
- return obj.end
- end_display.short_description = 'Fin'
- #
- # def validated_display(self, obj):
- # return obj.validated
- # validated_display.short_description = 'Validé'
- # validated_display.boolean = True
- #
- # #def adherent_link(self, obj):
- # # adherent = obj.get_adherent()
- # # url = reverse('admin:adhesions_adherent_change', args=[adherent.pk])
- # # return '<a href="%s">%s</a>' % (url, adherent)
- # #adherent_link.short_description = 'Adhérent'
- # #adherent_link.allow_tags = True
- #
- # def change(self, obj):
- # url = reverse('admin:banking_payment_change', args=[obj.pk])
- # return '<a href="%s" class="changelink">Modifier</a>' % url
- # change.short_description = ''
- # change.allow_tags = True
- #
- # def change_pending(self, obj):
- # if obj.validated:
- # return '-'
- # else:
- # return self.change(obj)
- # change_pending.short_description = ''
- # change_pending.allow_tags = True
- #
- # def get_actions(self, request):
- # actions = super().get_actions(request)
- # if request.user.has_perm('banking.validate_payment'):
- # actions['validate'] = (validate_payment, 'validate', 'Valider les paiements sélectionnés')
- # return actions
- #
- # def has_add_permission(self, request):
- # return False
- #
- # def has_change_permission(self, request, obj=None):
- # if obj and not request.user.has_perm('banking.validate_payment'):
- # return not obj.validated
- # return True
- #
- # def has_delete_permission(self, request, obj=None):
- # if obj and not request.user.has_perm('banking.validate_payment'):
- # return not obj.validated
- # return False
- admin.site.register(Payment, PaymentAdmin)
|