Browse Source

débiteur

Élie Bouttier 7 years ago
parent
commit
89021a5e11
5 changed files with 87 additions and 7 deletions
  1. 4 0
      accounts/models.py
  2. 31 2
      banking/admin.py
  3. 14 1
      banking/models.py
  4. 34 0
      banking/templates/banking/debtor.html
  5. 4 4
      banking/utils.py

+ 4 - 0
accounts/models.py

@@ -13,6 +13,10 @@ class Profile(models.Model):
     ssh_keys = models.TextField(blank=True, default='', verbose_name='Clefs SSH')
     notes = models.TextField(blank=True, default='')
 
+    @property
+    def email(self):
+        return self.user.email
+
     class Meta:
         verbose_name = 'profil'
 

+ 31 - 2
banking/admin.py

@@ -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)

+ 14 - 1
banking/models.py

@@ -18,6 +18,13 @@ class RecurringPayment(models.Model):
             return 'Service'
     payment_type.short_description = 'Type'
 
+    @property
+    def debtor(self):
+        if hasattr(self, 'adhesion'):
+            return self.adhesion
+        if hasattr(self, 'service'):
+            return self.service.adhesion
+
     def payment_object(self):
         return self.adhesion if hasattr(self, 'adhesion') else self.service
 
@@ -41,10 +48,16 @@ class RecurringPayment(models.Model):
         verbose_name = 'paiement récurrent'
         verbose_name_plural = 'paiements récurrents'
 
-    def __str__(self):
+    def display(self):
         payment = self.get_last_validated_update()
         return str(payment) if payment else "pas de paiement"
 
+    def __str__(self):
+        if hasattr(self, 'adhesion'):
+            return 'Cotisation adhérent %s' % self.adhesion
+        if hasattr(self, 'service'):
+            return 'Contribution au service %s' % self.service
+
 
 class PaymentUpdate(models.Model):
     STOP = 0

+ 34 - 0
banking/templates/banking/debtor.html

@@ -0,0 +1,34 @@
+{% extends "admin/base_site.html" %}
+{% load i18n admin_urls static admin_modify %}
+
+{% block breadcrumbs %}
+<div class="breadcrumbs">
+<a href="{% url 'admin:index' %}">{% trans 'Home' %}</a>
+&rsaquo; <a href="{% url 'admin:app_list' app_label=opts.app_label %}">{{ opts.app_config.verbose_name }}</a>
+&rsaquo; <a href="{% url opts|admin_urlname:'changelist' %}">{{ opts.verbose_name_plural|capfirst }}</a>
+&rsaquo; <a href="{% url opts|admin_urlname:'change' payment.pk %}">{{ payment|truncatewords:"18" }}</a>
+&rsaquo; Débiteur
+</div>
+{% endblock %}
+
+{% block content %}
+
+<ul>
+  <li><b>Type :</b> {{ adhesion.type }}</li>
+{% if adhesion.is_physical %}
+  <li><b>Nom :</b> {{ adherent.last_name }}</li>
+  <li><b>Prénom :</b> {{ adherent.first_name }}</li>
+{% else %}
+  <li><b>Raison sociale :</b> {{ adherent }}</li>
+{% endif %}
+  <li><b>Numéro d’adhérent :</b> <a href="{% url 'admin:adhesions_adhesion_change' adhesion.pk %}">{{ adhesion }}</a></li>
+  <li><b>IBAN :</b> non implémenté, voir pad…</li>
+{% with profile=adhesion.corporation|default:adhesion.user.profile %}
+  <li><b>Adresse :</b> <p>{{ profile.address|linebreaksbr }}</p></li>
+  <li><b>Téléphone :</b> {{ profile.phone_number }}</li>
+  <li><b>Adresse e-mail :</b> {{ profile.email }}</li>
+  <li><b>Notes :</b> <p>{{ profile.notes|linebreaksbr }}</p></li>
+{% endwith %}
+</ul>
+
+{% endblock %}

+ 4 - 4
banking/utils.py

@@ -24,9 +24,9 @@ def notify_payment_update(request, update, old_update=None):
         subject = 'Nouvelle demande de saisie bancaire'
     subject += ' %s %d' % (update.payment.payment_type(), update.payment.payment_object().pk)
 
-    url = 'https' if request.is_secure() else 'http'
-    url += '://' + request.get_host()
-    url += reverse('admin:banking_recurringpayment_change', args=(update.payment.pk,))
-    message += '\nVoir : ' + url
+    base_url = 'https' if request.is_secure() else 'http'
+    base_url += '://' + request.get_host()
+    message += '\nVoir : ' + base_url + reverse('admin:banking_recurringpayment_change', args=(update.payment.pk,))
+    message += '\nDébiteur : ' + base_url + reverse('admin:banking_recurringpayment_debtor', args=(update.payment.pk,))
 
     send_notification(subject, message, settings.PAYMENTS_EMAILS, cc=[benevole])