|
@@ -3,6 +3,11 @@ from django.db import models
|
|
|
from django.core.urlresolvers import reverse
|
|
|
from django.forms import BaseInlineFormSet
|
|
|
from django.utils.html import format_html
|
|
|
+from django.conf.urls import url
|
|
|
+from django.shortcuts import get_object_or_404
|
|
|
+from django.template.response import TemplateResponse
|
|
|
+
|
|
|
+from functools import update_wrapper
|
|
|
|
|
|
from services.models import ServiceType
|
|
|
from services.admin import ServiceAdmin
|
|
@@ -130,8 +135,8 @@ class RecurringPaymentAdmin(admin.ModelAdmin):
|
|
|
list_select_related = ('adhesion', 'service', 'service__service_type',)
|
|
|
inlines = (PendingPaymentUpdateInline, ValidatedPaymentUpdateInline,)
|
|
|
list_filter = (PaymentTypeFilter, PaymentStatusFilter, PendingPaymentFilter,)
|
|
|
- fields = ('payment_type', 'payment_object_link',)
|
|
|
- readonly_fields = ('payment_type', 'payment_object_link',)
|
|
|
+ fields = ('payment_type', 'payment_object_link', 'debtor_link',)
|
|
|
+ readonly_fields = ('payment_type', 'payment_object_link', 'debtor_link',)
|
|
|
search_fields = \
|
|
|
tuple([prefix_search_field('adhesion', f) for f in AdhesionAdmin.search_fields]) \
|
|
|
+ tuple([prefix_search_field('service', f) for f in ServiceAdmin.search_fields])
|
|
@@ -162,6 +167,11 @@ class RecurringPaymentAdmin(admin.ModelAdmin):
|
|
|
return format_html(u'<a href="{}">{}</a>', obj.get_absolute_url(), obj)
|
|
|
payment_object_link.short_description = 'Objet'
|
|
|
|
|
|
+ def debtor_link(self, obj):
|
|
|
+ url = reverse(viewname='admin:%s_%s_debtor' % (obj._meta.app_label, obj._meta.model_name), args=[obj.pk])
|
|
|
+ return format_html(u'<a href="{}">{}</a>', url, obj.debtor)
|
|
|
+ debtor_link.short_description = 'Débiteur'
|
|
|
+
|
|
|
def get_actions(self, request):
|
|
|
actions = super().get_actions(request)
|
|
|
if 'delete_selected' in actions:
|
|
@@ -174,5 +184,24 @@ class RecurringPaymentAdmin(admin.ModelAdmin):
|
|
|
def has_delete_permission(self, request, obj=None):
|
|
|
return False
|
|
|
|
|
|
+ def get_urls(self):
|
|
|
+ info = self.model._meta.app_label, self.model._meta.model_name
|
|
|
+ urls = [
|
|
|
+ url(r'^(.*)/debtor/$', self.admin_site.admin_view(self.debtor_view), name='%s_%s_debtor' % info),
|
|
|
+ ]
|
|
|
+ return urls + super().get_urls()
|
|
|
+
|
|
|
+ def debtor_view(self, request, payment_pk):
|
|
|
+ payment = get_object_or_404(RecurringPayment, pk=payment_pk)
|
|
|
+ adhesion = payment.debtor
|
|
|
+ context = dict(
|
|
|
+ self.admin_site.each_context(request),
|
|
|
+ opts=self.model._meta,
|
|
|
+ payment=payment,
|
|
|
+ adhesion=adhesion,
|
|
|
+ adherent=adhesion.adherent,
|
|
|
+ )
|
|
|
+ return TemplateResponse(request, 'banking/debtor.html', context)
|
|
|
+
|
|
|
|
|
|
admin.site.register(RecurringPayment, RecurringPaymentAdmin)
|