Parcourir la source

* Add first draft of "my subscriptions" template (juste the list)
* Add first draft of "my invoices" template
* Some changes on links name

Fabs il y a 10 ans
Parent
commit
67b2e8bf88

+ 1 - 0
coin/billing/models.py

@@ -32,6 +32,7 @@ class Invoice(models.Model):
         null=True,
         verbose_name=u'Date d\'échéance de paiement')
     member = models.ForeignKey(Member, null=True, blank=True, default=None,
+                               related_name='invoices',
                                verbose_name='Membre',
                                on_delete=models.SET_NULL)
 

+ 3 - 0
coin/members/models.py

@@ -100,6 +100,9 @@ class Member(CoinLdapSyncMixin, models.Model):
         ldap_user.save()
 
     def get_active_subscriptions(self, date=datetime.date.today()):
+        """
+        Return list of OfferSubscription which are active today
+        """
         return OfferSubscription.objects.filter(
             Q(member__exact=self.pk),
             Q(subscription_date__lte=date),

+ 0 - 15
coin/members/templates/members/abo.html

@@ -1,15 +0,0 @@
-{% extends "base.html" %}
-
-{% block content %}
-<div class="row">
-     <h2>Mes abonnements</h2>
-     <div class="panel">
-         <h3>Stats générales ADSL</h3>
-         <a class="button">Voir l'ADSL</a>
-     </div>
-     <div class="panel">
-         <h3>Stats générales VPN</h3>
-         <a class="button">Voir le VPN</a>
-     </div>
- </div>
-{% endblock %}

+ 42 - 7
coin/members/templates/members/detail.html

@@ -1,10 +1,45 @@
 {% extends "base.html" %}
 
 {% block content %}
-	{% if member %}
-		<dl>
-			<dt>Nom</dt><dd>{{ member.last_name }}</dd>
-			<dt>Prénom</dt><dd>{{ member.first_name }}</dd>
-		</dl>
-	{% endif %}
-{% endblock %}
+<div class="row">
+    <h2>Mes informations personnelles</h2>
+    <div class="large-6 columns">
+        <div class="panel">
+            <h3>Me joindre</h3>
+            <span class="label">Prénom - Nom</span>&nbsp;<strong>{{member.first_name}} {{member.last_name}}</strong><br/>
+            <span class="label">Adresse</span>&nbsp;{{member.address}} - {{member.postal_code}} {{member.city}}<br/>
+            <span class="label">Email</span>&nbsp;{{member.email}}<br/>
+            <span class="label">Téléphone fixe</span>&nbsp;{{member.home_phone_number}}<br/>
+            <span class="label">Téléphone mobile</span>&nbsp;{{member.mobile_phone_number}}<br/>
+        </div>
+    </div>
+
+        <div class="large-6 columns">
+            <div class="panel">
+                <h3>Je suis membre d'Illyse</h3>
+                <p>et ma cotisation est :
+                    {% if member.is_paid_up %}
+                        <span class="label success">à jour !</span>
+                    {% else %}
+                        <span class="label alert">non à jour !</span>
+                    {% endif %}
+                </p>
+                <p>Date de fin de cotisation : {{ member.end_date_of_membership }}</p>
+            </div>
+            <!--<div class="panel">
+                <h3>Infos additionnelles</h3>
+                <span class="label">Clé ssh</span> coin.pub
+            </div>-->
+        </div>
+
+    </div>
+    <div class="row">
+        <p>Pour modifier vos informations personnelles et vos coordonnées, veuillez en faire la demande par email à <a href="mailto:bureau@illyse.org">bureau@illyse.org</a></p>
+    </div>
+    <div class="row">
+        <!--<a href="#" class="button">Modifier mes informations</a>-->
+        <a href="https://www.illyse.org/documents/22" target="_blank" class="button">Mettre à jour ma cotisation</a>
+    </div>
+</div>
+
+{% endblock %}

+ 0 - 45
coin/members/templates/members/infos.html

@@ -1,45 +0,0 @@
-{% extends "base.html" %}
-
-{% block content %}
-<div class="row">
-    <h2>Mes informations personnelles</h2>
-    <div class="large-6 columns">
-        <div class="panel">
-            <h3>Me joindre</h3>
-            <span class="label">Prénom - Nom</span>&nbsp;<strong>{{member.first_name}} {{member.last_name}}</strong><br/>
-            <span class="label">Adresse</span>&nbsp;{{member.address}} - {{member.postal_code}} {{member.city}}<br/>
-            <span class="label">Email</span>&nbsp;{{member.email}}<br/>
-            <span class="label">Téléphone fixe</span>&nbsp;{{member.home_phone_number}}<br/>
-            <span class="label">Téléphone mobile</span>&nbsp;{{member.mobile_phone_number}}<br/>
-        </div>
-    </div>
-
-        <div class="large-6 columns">
-            <div class="panel">
-                <h3>Je suis membre d'Illyse</h3>
-                <p>et ma cotisation est :
-                    {% if member.is_paid_up %}
-                        <span class="label success">à jour !</span>
-                    {% else %}
-                        <span class="label alert">non à jour !</span>
-                    {% endif %}
-                </p>
-                <p>Date de fin de cotisation : {{ member.end_date_of_membership }}</p>
-            </div>
-            <!--<div class="panel">
-                <h3>Infos additionnelles</h3>
-                <span class="label">Clé ssh</span> coin.pub
-            </div>-->
-        </div>
-
-    </div>
-    <div class="row">
-        <p>Pour modifier vos informations personnelles et vos coordonnées, veuillez en faire la demande par email à <a href="mailto:bureau@illyse.org">bureau@illyse.org</a></p>
-    </div>
-    <div class="row">
-        <!--<a href="#" class="button">Modifier mes informations</a>-->
-        <a href="https://www.illyse.org/documents/22" target="_blank" class="button">Mettre à jour ma cotisation</a>
-    </div>
-</div>
-
-{% endblock %}

+ 37 - 0
coin/members/templates/members/invoices.html

@@ -0,0 +1,37 @@
+{% extends "base.html" %}
+
+{% block content %}
+<div class="row">
+     <h2>Mes factures</h2>
+
+    <table id="member_invoices" class="full-width">
+        <thead>
+            <tr>
+                <th>Numéro</th>
+                <th>Date</th>
+                <th>Montant</th>
+                <th></th>
+            </tr>
+        </thead>
+        <tbody>
+            {% for invoice in invoices %}
+            <tr>
+                <td>{{ invoice.number }}</td>
+                <td>{{ invoice.date }}</td>
+                <td>{{ invoice.amount }}</td>
+                <td><a href="{% url 'billing:invoice_pdf' id=invoice.number %}">PDF</a></td>
+            </tr>
+            {% endfor %}
+        </tbody>
+    </table>
+<!--
+     <div class="panel">
+         <h3>Stats générales ADSL</h3>
+         <a class="button">Voir l'ADSL</a>
+     </div>
+     <div class="panel">
+         <h3>Stats générales VPN</h3>
+         <a class="button">Voir le VPN</a>
+     </div>-->
+ </div>
+{% endblock %}

+ 35 - 0
coin/members/templates/members/subscriptions.html

@@ -0,0 +1,35 @@
+{% extends "base.html" %}
+
+{% block content %}
+<div class="row">
+     <h2>Mes abonnements</h2>
+
+    <table id="member_subscriptions" class="full-width">
+        <thead>
+            <tr>
+                <th width="60">Type</th>
+                <th>Identification</th>
+                <th>Date d'activation</th>
+            </tr>
+        </thead>
+        <tbody>
+            {% for subscription in subscriptions %}
+            <tr>
+                <td>{{ subscription.offer.type }}</td>
+                <td>{{ subscription.offer.name }}</td>
+                <td>{{ subscription.subscription_date }}</td>
+            </tr>
+            {% endfor %}
+        </tbody>
+    </table>
+<!--
+     <div class="panel">
+         <h3>Stats générales ADSL</h3>
+         <a class="button">Voir l'ADSL</a>
+     </div>
+     <div class="panel">
+         <h3>Stats générales VPN</h3>
+         <a class="button">Voir le VPN</a>
+     </div>-->
+ </div>
+{% endblock %}

+ 7 - 9
coin/members/urls.py

@@ -13,14 +13,12 @@ urlpatterns = patterns(
     url(r'^logout/$', 'django.contrib.auth.views.logout_then_login',
         name = 'logout'),
 
-    url(r'^info/$',views.infos,
-        name='infos'),
-    
-    # url(r'^info/(?P<pk>\d+)/$',
-    #     DetailView.as_view(
-    #         model=Member,
-    #         template_name='members/infos.html'),
-    #     name='infos'),
-    url(r'^abo/', views.index, name = 'abo'),
+    url(r'^detail/$',views.detail,
+        name='detail'),
+
+    url(r'^subscriptions/', views.subscriptions, name = 'subscriptions'),
+    # url(r'^subscription/(?P<id>\d+)', views.subscriptions, name = 'subscription'),
+
+    url(r'^invoices/', views.invoices, name = 'invoices'),
     url(r'^contact/', views.index, name='contact')
 )

+ 29 - 6
coin/members/views.py

@@ -1,7 +1,7 @@
 from django.template import RequestContext
 from django.shortcuts import render_to_response
 from django.contrib.auth.decorators import login_required
-
+from django.http import Http404
 
 @login_required
 def index(request):
@@ -9,20 +9,43 @@ def index(request):
 
 
 @login_required
-def infos(request):
+def detail(request):
     if hasattr(request.user, 'member'):
         member = request.user.member
     else:
         #TODO: logger: ce cas ne devrait pas exister
-        member = None
+        raise Http404
 
-    return render_to_response('members/infos.html', {'member': member},
+    return render_to_response('members/detail.html', {'member': member},
                               context_instance=RequestContext(request))
 
+@login_required
+def subscriptions(request):
+    if hasattr(request.user, 'member'):
+        member = request.user.member
+    else:
+        #TODO: logger: ce cas ne devrait pas exister
+        raise Http404
+
+    subscriptions = member.get_active_subscriptions()
+
+    return render_to_response('members/subscriptions.html',
+                              {'subscriptions':subscriptions},
+                              context_instance=RequestContext(request))
 
 @login_required
-def abos(request):
-    return render_to_response('members/abo.html')
+def invoices(request):
+    if hasattr(request.user, 'member'):
+        member = request.user.member
+    else:
+        #TODO: logger: ce cas ne devrait pas exister
+        raise Http404
+
+    invoices = member.invoices.all()
+
+    return render_to_response('members/invoices.html',
+                              {'invoices':invoices},
+                              context_instance=RequestContext(request))
 
 
 @login_required

+ 5 - 0
coin/static/css/illyse.css

@@ -108,3 +108,8 @@ h2 {
 	color: #FF6600;
 	border-bottom: 2px solid #0086A9;
 }
+
+/* Tables */
+table.full-width {
+    width:100%;
+}

+ 0 - 1
coin/templates/base.html

@@ -26,7 +26,6 @@
    <div class="large-3 columns">
     {% block sidenav %}
     <nav id="sidebox" class="hide-for-small">
-     <h3 id="nav">Navigation</h3>
      <ul class="side-nav">
          {% include "menu_items.html" %}
      </ul>

+ 3 - 2
coin/templates/menu_items.html

@@ -1,7 +1,8 @@
 {% load activelink %}
 <li class="{% ifactive 'home' %}active{% endifactive %}"><a href="{% url 'home' %}">Tableau de bord</a></li>
-<li class="{% ifactive 'members:infos' %}active{% endifactive %}"><a href="{% url 'members:infos' %}">Mes informations personnelles</a></li>
-<li class="{% ifactive '' %}active{% endifactive %}"><a href="/members/abo/">Mes abonnements</a></li>
+<li class="{% ifactive 'members:detail' %}active{% endifactive %}"><a href="{% url 'members:detail' %}">Mes informations personnelles</a></li>
+<li class="{% ifactive 'members:subscriptions' %}active{% endifactive %}"><a href="{% url 'members:subscriptions' %}">Mes abonnements</a></li>
+<li class="{% ifactive 'members:invoices' %}active{% endifactive %}"><a href="{% url 'members:invoices' %}">Mes factures</a></li>
 <li class="{% ifactive '' %}active{% endifactive %}"><a href="/members/contact/">Contact / Support</a></li>
 <li class="divider"></li>
 <li class="{% ifactive '' %}active{% endifactive %}"><a href="{% url 'members:logout' %}">Déconnexion</a></li>