mirror of
https://gitlab2.federez.net/re2o/re2o
synced 2024-11-22 11:23:10 +00:00
Move facture list to cotisation, add paginator
This commit is contained in:
parent
e2d9591dc8
commit
af3da1eafb
4 changed files with 162 additions and 44 deletions
131
cotisations/templates/cotisations/aff_profil.html
Normal file
131
cotisations/templates/cotisations/aff_profil.html
Normal file
|
@ -0,0 +1,131 @@
|
||||||
|
{% comment %}
|
||||||
|
Re2o est un logiciel d'administration développé initiallement au rezometz. Il
|
||||||
|
se veut agnostique au réseau considéré, de manière à être installable en
|
||||||
|
quelques clics.
|
||||||
|
|
||||||
|
Copyright © 2017 Gabriel Détraz
|
||||||
|
Copyright © 2017 Lara Kermarec
|
||||||
|
Copyright © 2017 Augustin Lemesle
|
||||||
|
|
||||||
|
This program is free software; you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation; either version 2 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
This program is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License along
|
||||||
|
with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
|
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
|
{% endcomment %}
|
||||||
|
|
||||||
|
{% load acl %}
|
||||||
|
{% load i18n %}
|
||||||
|
{% load logs_extra %}
|
||||||
|
|
||||||
|
|
||||||
|
<div class="panel panel-default">
|
||||||
|
<div class="panel-heading clearfix profil" data-parent="#accordion" data-toggle="collapse"
|
||||||
|
data-target="#subscriptions">
|
||||||
|
<h3 class="panel-title pull-left">
|
||||||
|
<i class="fa fa-eur"></i>
|
||||||
|
{% trans "Subscriptions" %}
|
||||||
|
</h3>
|
||||||
|
</div>
|
||||||
|
<div id="subscriptions" class="panel-collapse collapse">
|
||||||
|
<div class="panel-body">
|
||||||
|
{% can_create Facture %}
|
||||||
|
<a class="btn btn-primary btn-sm" role="button" href="{% url 'cotisations:new-facture' users.id %}">
|
||||||
|
<i class="fa fa-eur"></i>
|
||||||
|
{% trans "Add a subscription" %}
|
||||||
|
</a>
|
||||||
|
{% if user_solde %}
|
||||||
|
<a class="btn btn-primary btn-sm" role="button" href="{% url 'cotisations:credit-solde' users.id %}">
|
||||||
|
<i class="fa fa-eur"></i>
|
||||||
|
{% trans "Edit the balance" %}
|
||||||
|
</a>
|
||||||
|
{% endif%}
|
||||||
|
{% acl_end %}
|
||||||
|
</div>
|
||||||
|
<div class="panel-body">
|
||||||
|
{% if facture_list %}
|
||||||
|
<div class="table-responsive">
|
||||||
|
{% if facture_list.paginator %}
|
||||||
|
{% include 'pagination.html' with list=facture_list %}
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
<table class="table table-striped">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th>
|
||||||
|
{% trans "User" as tr_user %}
|
||||||
|
{% include 'buttons/sort.html' with prefix='cotis' col='user' text=tr_user %}
|
||||||
|
</th>
|
||||||
|
<th>{% trans "Designation" %}</th>
|
||||||
|
<th>{% trans "Total price" %}</th>
|
||||||
|
<th>
|
||||||
|
{% trans "Payment method" as tr_payment_method %}
|
||||||
|
{% include 'buttons/sort.html' with prefix='cotis' col='paiement' text=tr_payment_method %}
|
||||||
|
</th>
|
||||||
|
<th>
|
||||||
|
{% trans "Date" as tr_date %}
|
||||||
|
{% include 'buttons/sort.html' with prefix='cotis' col='date' text=tr_date %}
|
||||||
|
</th>
|
||||||
|
<th>
|
||||||
|
{% trans "Invoice ID" as tr_invoice_id %}
|
||||||
|
{% include 'buttons/sort.html' with prefix='cotis' col='id' text=tr_invoice_id %}
|
||||||
|
</th>
|
||||||
|
<th></th>
|
||||||
|
<th></th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
{% for facture in facture_list %}
|
||||||
|
<tr>
|
||||||
|
<td><a href="{% url 'users:profil' userid=facture.user.id %}">{{ facture.user }}</a></td>
|
||||||
|
<td>{{ facture.name }}</td>
|
||||||
|
<td>{{ facture.prix_total }}</td>
|
||||||
|
<td>{{ facture.paiement }}</td>
|
||||||
|
<td>{{ facture.date }}</td>
|
||||||
|
<td>{{ facture.id }}</td>
|
||||||
|
<td>
|
||||||
|
{% can_edit facture %}
|
||||||
|
{% include 'buttons/edit.html' with href='cotisations:edit-facture' id=facture.id %}
|
||||||
|
{% acl_else %}
|
||||||
|
{% trans "Controlled invoice" %}
|
||||||
|
{% acl_end %}
|
||||||
|
{% can_delete facture %}
|
||||||
|
{% include 'buttons/suppr.html' with href='cotisations:del-facture' id=facture.id %}
|
||||||
|
{% acl_end %}
|
||||||
|
{% history_button facture %}
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
{% if facture.valid %}
|
||||||
|
<a class="btn btn-primary btn-sm" role="button" href="{% url 'cotisations:facture-pdf' facture.id %}">
|
||||||
|
<i class="fa fa-file-pdf-o"></i> {% trans "PDF" %}
|
||||||
|
</a>
|
||||||
|
{% else %}
|
||||||
|
<i class="text-danger">{% trans "Invalidated invoice" %}</i>
|
||||||
|
{% endif %}
|
||||||
|
{% if facture.control and facture.is_subscription %}
|
||||||
|
<a class="btn btn-primary btn-sm" role="button" href="{% url 'cotisations:voucher-pdf' facture.id %}">
|
||||||
|
<i class="fa fa-file-pdf-o"></i> {% trans "Voucher" %}
|
||||||
|
</a>
|
||||||
|
{% endif %}
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
{% endfor %}
|
||||||
|
</table>
|
||||||
|
|
||||||
|
{% if facture_list.paginator %}
|
||||||
|
{% include 'pagination.html' with list=facture_list %}
|
||||||
|
{% endif %}
|
||||||
|
</div>
|
||||||
|
{% else %}
|
||||||
|
<p>{% trans "No invoice" %}</p>
|
||||||
|
{% endif %}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
|
@ -33,6 +33,7 @@ import os
|
||||||
|
|
||||||
from django.urls import reverse
|
from django.urls import reverse
|
||||||
from django.shortcuts import render, redirect, get_object_or_404
|
from django.shortcuts import render, redirect, get_object_or_404
|
||||||
|
from django.template.loader import render_to_string
|
||||||
from django.contrib.auth.decorators import login_required
|
from django.contrib.auth.decorators import login_required
|
||||||
from django.contrib import messages
|
from django.contrib import messages
|
||||||
from django.db.models import ProtectedError
|
from django.db.models import ProtectedError
|
||||||
|
@ -1060,3 +1061,26 @@ def voucher_pdf(request, invoice, **_kwargs):
|
||||||
"date_begin": invoice.date,
|
"date_begin": invoice.date,
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
|
|
||||||
|
def aff_profil(request,user):
|
||||||
|
"""View used to display the cotisations on a user's profil."""
|
||||||
|
|
||||||
|
factures = Facture.objects.filter(user=user)
|
||||||
|
factures = SortTable.sort(
|
||||||
|
factures,
|
||||||
|
request.GET.get("col"),
|
||||||
|
request.GET.get("order"),
|
||||||
|
SortTable.COTISATIONS_INDEX,
|
||||||
|
)
|
||||||
|
|
||||||
|
pagination_large_number = GeneralOption.get_cached_value("pagination_large_number")
|
||||||
|
factures = re2o_paginator(request, factures,pagination_large_number)
|
||||||
|
|
||||||
|
context = {
|
||||||
|
"users":user,
|
||||||
|
"facture_list": factures,
|
||||||
|
}
|
||||||
|
|
||||||
|
return render_to_string(
|
||||||
|
"cotisations/aff_profil.html",context=context,request=request,using=None
|
||||||
|
)
|
||||||
|
|
|
@ -407,38 +407,12 @@ with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
<div class="panel panel-default">
|
|
||||||
<div class="panel-heading clearfix profil" data-parent="#accordion" data-toggle="collapse"
|
|
||||||
data-target="#subscriptions">
|
{% for template in apps_templates_list %}
|
||||||
<h3 class="panel-title pull-left">
|
{{ template }}
|
||||||
<i class="fa fa-eur"></i>
|
{% endfor %}
|
||||||
{% trans "Subscriptions" %}
|
|
||||||
</h3>
|
|
||||||
</div>
|
|
||||||
<div id="subscriptions" class="panel-collapse collapse">
|
|
||||||
<div class="panel-body">
|
|
||||||
{% can_create Facture %}
|
|
||||||
<a class="btn btn-primary btn-sm" role="button" href="{% url 'cotisations:new-facture' users.id %}">
|
|
||||||
<i class="fa fa-eur"></i>
|
|
||||||
{% trans "Add a subscription" %}
|
|
||||||
</a>
|
|
||||||
{% if user_solde %}
|
|
||||||
<a class="btn btn-primary btn-sm" role="button" href="{% url 'cotisations:credit-solde' users.id %}">
|
|
||||||
<i class="fa fa-eur"></i>
|
|
||||||
{% trans "Edit the balance" %}
|
|
||||||
</a>
|
|
||||||
{% endif%}
|
|
||||||
{% acl_end %}
|
|
||||||
</div>
|
|
||||||
<div class="panel-body">
|
|
||||||
{% if facture_list %}
|
|
||||||
{% include 'cotisations/aff_cotisations.html' with facture_list=facture_list %}
|
|
||||||
{% else %}
|
|
||||||
<p>{% trans "No invoice" %}</p>
|
|
||||||
{% endif %}
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="panel panel-default">
|
<div class="panel panel-default">
|
||||||
<div class="panel-heading clearfix profil" data-parent="#accordion" data-toggle="collapse" data-target="#bans">
|
<div class="panel-heading clearfix profil" data-parent="#accordion" data-toggle="collapse" data-target="#bans">
|
||||||
<h3 class="panel-title pull-left">
|
<h3 class="panel-title pull-left">
|
||||||
|
@ -544,9 +518,6 @@ with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{% for template in apps_templates_list %}
|
|
||||||
{{ template }}
|
|
||||||
{% endfor %}
|
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|
|
@ -1357,14 +1357,7 @@ def profil(request, users, **_kwargs):
|
||||||
]
|
]
|
||||||
|
|
||||||
nb_machines = users.user_interfaces().count()
|
nb_machines = users.user_interfaces().count()
|
||||||
|
|
||||||
factures = Facture.objects.filter(user=users)
|
|
||||||
factures = SortTable.sort(
|
|
||||||
factures,
|
|
||||||
request.GET.get("col"),
|
|
||||||
request.GET.get("order"),
|
|
||||||
SortTable.COTISATIONS_INDEX,
|
|
||||||
)
|
|
||||||
bans = Ban.objects.filter(user=users)
|
bans = Ban.objects.filter(user=users)
|
||||||
bans = SortTable.sort(
|
bans = SortTable.sort(
|
||||||
bans,
|
bans,
|
||||||
|
@ -1392,7 +1385,6 @@ def profil(request, users, **_kwargs):
|
||||||
"users": users,
|
"users": users,
|
||||||
"nb_machines":nb_machines,
|
"nb_machines":nb_machines,
|
||||||
"apps_templates_list": apps_templates_list,
|
"apps_templates_list": apps_templates_list,
|
||||||
"facture_list": factures,
|
|
||||||
"ban_list": bans,
|
"ban_list": bans,
|
||||||
"white_list": whitelists,
|
"white_list": whitelists,
|
||||||
"user_solde": user_solde,
|
"user_solde": user_solde,
|
||||||
|
|
Loading…
Reference in a new issue