admin.py 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172
  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 django.core.urlresolvers import reverse
  6. from services.models import ServiceType
  7. from .models import Payment
  8. ### Inlines
  9. class PaymentInline(GenericTabularInline):
  10. model = Payment
  11. ct_field = 'reason_type'
  12. ct_fk_field = 'reason_id'
  13. extra = 0
  14. #max_num = 0
  15. fields = ('amount', 'period', 'payment_method', 'start', 'end',)
  16. #readonly_fields = ('amount', 'period', 'payment_method', 'start',)
  17. verbose_name_plural = 'Contributions'
  18. #def get_queryset(self, request):
  19. # # Paiement récurrent en cours (sans date de fin)
  20. # return super().get_queryset(request).filter(period__gt=0, end__isnull=True)
  21. #def has_delete_permission(self, request, obj=None):
  22. # return False
  23. #class ValidatedPaymentInline(PaymentInline):
  24. # extra = 0
  25. # verbose_name_plural = 'Paiements validés'
  26. #
  27. # def get_readonly_fields(self, request, obj=None):
  28. # if request.user.has_perm('banking.validate_payment'):
  29. # return ()
  30. # else:
  31. # return self.get_fields(request, obj)
  32. #
  33. # def has_add_permission(self, request):
  34. # return False
  35. #
  36. # def has_delete_permission(self, request, obj=None):
  37. # return request.user.has_perm('banking.validate_payment')
  38. #
  39. # def get_queryset(self, request):
  40. # return super().get_queryset(request).filter(validated=True)
  41. #
  42. #
  43. #class PendingOrNewPaymentInline(PaymentInline):
  44. # verbose_name_plural = 'Paiements en attente de validation et nouveaux paiements'
  45. #
  46. # def get_queryset(self, request):
  47. # return super().get_queryset(request).filter(validated=False)
  48. ### Filters
  49. class PaymentTypeFilter(admin.SimpleListFilter):
  50. title = 'type de paiement'
  51. parameter_name = 'type'
  52. def lookups(self, request, model_admin):
  53. choices = [
  54. ('membership', 'Cotisation'),
  55. ('service', 'Service'),
  56. ]
  57. service_types = ServiceType.objects.all()
  58. if not (request.user.is_superuser or request.user.has_perm('banking.validate_payment')):
  59. service_types = service_types.filter(group__in=request.user.groups.all())
  60. for stype in service_types:
  61. choices.append((stype.pk, 'Service (%s)' % stype.name))
  62. return choices
  63. def queryset(self, request, queryset):
  64. if self.value() == 'membership':
  65. return queryset.filter(reason_type__app_label='adhesions',
  66. reason_type__model='adhesion')
  67. if self.value() == 'service':
  68. return queryset.filter(reason_type__app_label='services',
  69. reason_type__model='service')
  70. try:
  71. service_type = ServiceType.objects.get(pk=int(self.value()))
  72. except (ValueError, TypeError, ServiceType.DoesNotExist,):
  73. return queryset
  74. else:
  75. return queryset.filter(service__service_type=service_type)
  76. #### Actions
  77. #
  78. #def validate_payment(payment, request, queryset):
  79. # queryset.update(validated=True)
  80. ### ModelAdmin
  81. class PaymentAdmin(admin.ModelAdmin):
  82. list_display = ('id', 'type_verbose', 'get_adhesion', 'amount', 'period', 'start_display', 'end_display',)
  83. # #list_display_links = None
  84. list_filter = (PaymentTypeFilter, 'payment_method', 'validated',)
  85. #
  86. # def get_list_display(self, request):
  87. # list_display = ()
  88. # #if request.user.has_perm('auth.change_user'):
  89. # # list_display += ('adherent_link',)
  90. # #else:
  91. # #list_display += ('get_adherent',)
  92. # list_display += ('payment_type_verbose', 'get_adherent', 'amount',
  93. # 'period', 'payment_method', 'start_display', 'end_display', 'validated_display',)
  94. # #if request.user.has_perm('banking.validate_payment'):
  95. # # list_display += ('change',)
  96. # #else:
  97. # # list_display += ('change_pending',)
  98. # return list_display
  99. #
  100. def start_display(self, obj):
  101. return obj.start
  102. start_display.short_description = 'Début'
  103. def end_display(self, obj):
  104. return obj.end
  105. end_display.short_description = 'Fin'
  106. #
  107. # def validated_display(self, obj):
  108. # return obj.validated
  109. # validated_display.short_description = 'Validé'
  110. # validated_display.boolean = True
  111. #
  112. # #def adherent_link(self, obj):
  113. # # adherent = obj.get_adherent()
  114. # # url = reverse('admin:adhesions_adherent_change', args=[adherent.pk])
  115. # # return '<a href="%s">%s</a>' % (url, adherent)
  116. # #adherent_link.short_description = 'Adhérent'
  117. # #adherent_link.allow_tags = True
  118. #
  119. # def change(self, obj):
  120. # url = reverse('admin:banking_payment_change', args=[obj.pk])
  121. # return '<a href="%s" class="changelink">Modifier</a>' % url
  122. # change.short_description = ''
  123. # change.allow_tags = True
  124. #
  125. # def change_pending(self, obj):
  126. # if obj.validated:
  127. # return '-'
  128. # else:
  129. # return self.change(obj)
  130. # change_pending.short_description = ''
  131. # change_pending.allow_tags = True
  132. #
  133. # def get_actions(self, request):
  134. # actions = super().get_actions(request)
  135. # if request.user.has_perm('banking.validate_payment'):
  136. # actions['validate'] = (validate_payment, 'validate', 'Valider les paiements sélectionnés')
  137. # return actions
  138. #
  139. # def has_add_permission(self, request):
  140. # return False
  141. #
  142. # def has_change_permission(self, request, obj=None):
  143. # if obj and not request.user.has_perm('banking.validate_payment'):
  144. # return not obj.validated
  145. # return True
  146. #
  147. # def has_delete_permission(self, request, obj=None):
  148. # if obj and not request.user.has_perm('banking.validate_payment'):
  149. # return not obj.validated
  150. # return False
  151. admin.site.register(Payment, PaymentAdmin)