Commit 3cc2c593 authored by Maël Kervella's avatar Maël Kervella

Ajout du sort dans topo, logs, machines, cotisations

Ajout du sort sur les colones où ça avait un minimum de sens et où le
sort était basé sur des ORDER_BY de BDD.
Peut être certaines colones n'avaient pas besoin d'être triées mais tant
que c'est possible et pas illogique pourquoi ne pas le faire ?
parent 46e1b784
...@@ -29,11 +29,11 @@ with this program; if not, write to the Free Software Foundation, Inc., ...@@ -29,11 +29,11 @@ with this program; if not, write to the Free Software Foundation, Inc.,
<table class="table table-striped"> <table class="table table-striped">
<thead> <thead>
<tr> <tr>
<th>Utilisateur</th> <th>{% include "buttons/sort.html" with col='user' text='Utilisateur' %}</th>
<th>Designation</th> <th>Designation</th>
<th>Prix total</th> <th>Prix total</th>
<th>Moyen de paiement</th> <th>{% include "buttons/sort.html" with col='paiement' text='Moyen de paiement' %}</th>
<th>Date</th> <th>{% include "buttons/sort.html" with col='date' text='Date' %}</th>
<th></th> <th></th>
<th></th> <th></th>
<th></th> <th></th>
......
...@@ -40,14 +40,14 @@ with this program; if not, write to the Free Software Foundation, Inc., ...@@ -40,14 +40,14 @@ with this program; if not, write to the Free Software Foundation, Inc.,
<thead> <thead>
<tr> <tr>
<th>Profil</th> <th>Profil</th>
<th>Nom</th> <th>{% include "buttons/sort.html" with col='name' text='Nom' %}</th>
<th>Prénom</th> <th>{% include "buttons/sort.html" with col='surname' text='Prénom' %}</th>
<th>Designation</th> <th>Designation</th>
<th>Prix total</th> <th>Prix total</th>
<th>Moyen de paiement</th> <th>{% include "buttons/sort.html" with col='paiement' text='Moyen de paiement' %}</th>
<th>Date</th> <th>{% include "buttons/sort.html" with col='date' text='Date' %}</th>
<th>Validité</th> <th>{% include "buttons/sort.html" with col='valid' text='Valide' %}</th>
<th>Controle trésorier</th> <th>{% include "buttons/sort.html" with col='control' text='Contrôlée' %}</th>
</tr> </tr>
</thead> </thead>
{% for form in controlform.forms %} {% for form in controlform.forms %}
......
...@@ -40,6 +40,7 @@ from users.models import User ...@@ -40,6 +40,7 @@ from users.models import User
from re2o.settings import LOGO_PATH from re2o.settings import LOGO_PATH
from re2o import settings from re2o import settings
from re2o.views import form from re2o.views import form
from re2o.utils import SortTable
from preferences.models import OptionalUser, AssoOption, GeneralOption from preferences.models import OptionalUser, AssoOption, GeneralOption
from .models import Facture, Article, Vente, Paiement, Banque from .models import Facture, Article, Vente, Paiement, Banque
from .forms import NewFactureForm, TrezEditFactureForm, EditFactureForm from .forms import NewFactureForm, TrezEditFactureForm, EditFactureForm
...@@ -519,7 +520,13 @@ def control(request): ...@@ -519,7 +520,13 @@ def control(request):
factures.Case à cocher, pratique""" factures.Case à cocher, pratique"""
options, _created = GeneralOption.objects.get_or_create() options, _created = GeneralOption.objects.get_or_create()
pagination_number = options.pagination_number pagination_number = options.pagination_number
facture_list = Facture.objects.order_by('date').reverse() facture_list = Facture.objects.select_related('user').select_related('paiement')
facture_list = SortTable.sort(
facture_list,
request.GET.get('col'),
request.GET.get('order'),
SortTable.COTISATIONS_CONTROL
)
controlform_set = modelformset_factory( controlform_set = modelformset_factory(
Facture, Facture,
fields=('control', 'valid'), fields=('control', 'valid'),
...@@ -533,11 +540,7 @@ def control(request): ...@@ -533,11 +540,7 @@ def control(request):
facture_list = paginator.page(1) facture_list = paginator.page(1)
except EmptyPage: except EmptyPage:
facture_list = paginator.page(paginator.num.pages) facture_list = paginator.page(paginator.num.pages)
page_query = Facture.objects.order_by('date').select_related('user')\ controlform = controlform_set(request.POST or None, queryset=facture_list.object_list)
.select_related('paiement').reverse().filter(
id__in=[facture.id for facture in facture_list]
)
controlform = controlform_set(request.POST or None, queryset=page_query)
if controlform.is_valid(): if controlform.is_valid():
with transaction.atomic(), reversion.create_revision(): with transaction.atomic(), reversion.create_revision():
controlform.save() controlform.save()
...@@ -586,8 +589,14 @@ def index(request): ...@@ -586,8 +589,14 @@ def index(request):
"""Affiche l'ensemble des factures, pour les cableurs et +""" """Affiche l'ensemble des factures, pour les cableurs et +"""
options, _created = GeneralOption.objects.get_or_create() options, _created = GeneralOption.objects.get_or_create()
pagination_number = options.pagination_number pagination_number = options.pagination_number
facture_list = Facture.objects.order_by('date').select_related('user')\ facture_list = Facture.objects.select_related('user')\
.select_related('paiement').prefetch_related('vente_set').reverse() .select_related('paiement').prefetch_related('vente_set')
facture_list = SortTable.sort(
facture_list,
request.GET.get('col'),
request.GET.get('order'),
SortTable.COTISATIONS_INDEX
)
paginator = Paginator(facture_list, pagination_number) paginator = Paginator(facture_list, pagination_number)
page = request.GET.get('page') page = request.GET.get('page')
try: try:
......
...@@ -33,8 +33,8 @@ with this program; if not, write to the Free Software Foundation, Inc., ...@@ -33,8 +33,8 @@ with this program; if not, write to the Free Software Foundation, Inc.,
<tr> <tr>
<th>Objet modifié</th> <th>Objet modifié</th>
<th>Type de l'objet</th> <th>Type de l'objet</th>
<th>Modification par</th> <th>{% include "buttons/sort.html" with col='author' text='Modification par' %}</th>
<th>Date de modification</th> <th>{% include "buttons/sort.html" with col='date' text='Date de modification' %}</th>
<th>Commentaire</th> <th>Commentaire</th>
<th></th> <th></th>
</tr> </tr>
......
...@@ -31,7 +31,7 @@ with this program; if not, write to the Free Software Foundation, Inc., ...@@ -31,7 +31,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
<table class="table table-striped"> <table class="table table-striped">
<thead> <thead>
<tr> <tr>
<th>Date</th> <th>{% include "buttons/sort.html" with col='date' text='Date' %}</th>
<th>Modification</th> <th>Modification</th>
<th></th> <th></th>
</tr> </tr>
......
...@@ -57,7 +57,7 @@ from preferences.models import GeneralOption ...@@ -57,7 +57,7 @@ from preferences.models import GeneralOption
from re2o.views import form from re2o.views import form
from re2o.utils import all_whitelisted, all_baned, all_has_access, all_adherent from re2o.utils import all_whitelisted, all_baned, all_has_access, all_adherent
from re2o.utils import all_active_assigned_interfaces_count from re2o.utils import all_active_assigned_interfaces_count
from re2o.utils import all_active_interfaces_count from re2o.utils import all_active_interfaces_count, SortTable
STATS_DICT = { STATS_DICT = {
0: ["Tout", 36], 0: ["Tout", 36],
...@@ -83,7 +83,13 @@ def index(request): ...@@ -83,7 +83,13 @@ def index(request):
content_type__in=ContentType.objects.filter( content_type__in=ContentType.objects.filter(
model__in=content_type_filter model__in=content_type_filter
) )
).order_by('revision__date_created').reverse().select_related('revision') ).select_related('revision')
versions = SortTable.sort(
versions,
request.GET.get('col'),
request.GET.get('order'),
SortTable.LOGS_INDEX
)
paginator = Paginator(versions, pagination_number) paginator = Paginator(versions, pagination_number)
page = request.GET.get('page') page = request.GET.get('page')
try: try:
...@@ -129,9 +135,14 @@ def stats_logs(request): ...@@ -129,9 +135,14 @@ def stats_logs(request):
classés par date croissante, en vrac""" classés par date croissante, en vrac"""
options, _created = GeneralOption.objects.get_or_create() options, _created = GeneralOption.objects.get_or_create()
pagination_number = options.pagination_number pagination_number = options.pagination_number
revisions = Revision.objects.all().order_by('date_created')\ revisions = Revision.objects.all().select_related('user')\
.reverse().select_related('user')\
.prefetch_related('version_set__object') .prefetch_related('version_set__object')
revisions = SortTable.sort(
revisions,
request.GET.get('col'),
request.GET.get('order'),
SortTable.LOGS_STATS_LOGS
)
paginator = Paginator(revisions, pagination_number) paginator = Paginator(revisions, pagination_number)
page = request.GET.get('page') page = request.GET.get('page')
try: try:
......
...@@ -35,7 +35,7 @@ with this program; if not, write to the Free Software Foundation, Inc., ...@@ -35,7 +35,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
<col width="144px"> <col width="144px">
</colgroup> </colgroup>
<thead> <thead>
<th>Nom DNS</th> <th>{% include "buttons/sort.html" with col='name' text='Nom DNS' %}</th>
<th>Type</th> <th>Type</th>
<th>MAC</th> <th>MAC</th>
<th>IP</th> <th>IP</th>
...@@ -44,7 +44,7 @@ with this program; if not, write to the Free Software Foundation, Inc., ...@@ -44,7 +44,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
{% for machine in machines_list %} {% for machine in machines_list %}
<tr class="info"> <tr class="info">
<td colspan="4"> <td colspan="4">
<b>{{ machine.name }}</b> <i class="glyphicon glyphicon-chevron-right"></i> <b>{{ machine.name|default:'<i>Pas de nom</i>' }}</b> <i class="glyphicon glyphicon-chevron-right"></i>
<a href="{% url 'users:profil' userid=machine.user.id %}" title="Voir le profil"> <a href="{% url 'users:profil' userid=machine.user.id %}" title="Voir le profil">
<i class="glyphicon glyphicon-user"></i> {{ machine.user }} <i class="glyphicon glyphicon-user"></i> {{ machine.user }}
</a> </a>
......
...@@ -114,7 +114,8 @@ from preferences.models import GeneralOption, OptionalMachine ...@@ -114,7 +114,8 @@ from preferences.models import GeneralOption, OptionalMachine
from re2o.utils import ( from re2o.utils import (
all_active_assigned_interfaces, all_active_assigned_interfaces,
all_has_access, all_has_access,
filter_active_interfaces filter_active_interfaces,
SortTable
) )
from re2o.views import form from re2o.views import form
...@@ -885,7 +886,13 @@ def del_nas(request): ...@@ -885,7 +886,13 @@ def del_nas(request):
def index(request): def index(request):
options, created = GeneralOption.objects.get_or_create() options, created = GeneralOption.objects.get_or_create()
pagination_large_number = options.pagination_large_number pagination_large_number = options.pagination_large_number
machines_list = Machine.objects.select_related('user').prefetch_related('interface_set__domain__extension').prefetch_related('interface_set__ipv4__ip_type').prefetch_related('interface_set__type__ip_type__extension').prefetch_related('interface_set__domain__related_domain__extension').order_by('pk') machines_list = Machine.objects.select_related('user').prefetch_related('interface_set__domain__extension').prefetch_related('interface_set__ipv4__ip_type').prefetch_related('interface_set__type__ip_type__extension').prefetch_related('interface_set__domain__related_domain__extension')
machines_list = SortTable.sort(
machines_list,
request.GET.get('col'),
request.GET.get('order'),
SortTable.MACHINES_INDEX
)
paginator = Paginator(machines_list, pagination_large_number) paginator = Paginator(machines_list, pagination_large_number)
page = request.GET.get('page') page = request.GET.get('page')
try: try:
......
...@@ -171,6 +171,60 @@ class SortTable: ...@@ -171,6 +171,60 @@ class SortTable:
'end': 'date_end', 'end': 'date_end',
'default': 'date_end' 'default': 'date_end'
} }
MACHINES_INDEX = {
'name': 'name',
'default': 'pk'
}
COTISATIONS_INDEX = {
'user': 'user__pseudo',
'paiement': 'paiement__moyen',
'date': 'date',
'default': 'date'
}
COTISATIONS_CONTROL = {
'name': 'user__name',
'surname': 'user__surname',
'paiement': 'paiement',
'date': 'date',
'valid': 'valid',
'control': 'control',
'default': 'date'
}
TOPOLOGIE_INDEX = {
'dns': 'switch_interface__domain__name',
'ip': 'switch_interface__ipv4__ipv4',
'loc': 'location',
'ports': 'number',
'stack': 'stack__name',
'default': 'switch_interface__domain__name'
}
TOPOLOGIE_INDEX_PORT = {
'port': 'port',
'room': 'room__name',
'interface': 'machine_interface__domain__name',
'related': 'related__switch__name',
'radius': 'radius',
'vlan': 'vlan_force__name',
'default': 'port'
}
TOPOLOGIE_INDEX_ROOM = {
'name': 'name',
'default': 'name'
}
TOPOLOGIE_INDEX_STACK = {
'name': 'name',
'id': 'stack_id',
'default': 'stack_id'
}
LOGS_INDEX = {
'date': 'revision__date_created',
'default': 'revision__date_created'
}
LOGS_STATS_LOGS = {
'author': 'user__name',
'date': 'date_created',
'default': 'date_created'
}
@staticmethod @staticmethod
def sort(request, col, order, criterion): def sort(request, col, order, criterion):
......
...@@ -29,7 +29,7 @@ with this program; if not, write to the Free Software Foundation, Inc., ...@@ -29,7 +29,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
<table class="table table-striped"> <table class="table table-striped">
<thead> <thead>
<tr> <tr>
<th>Chambre</th> <th>{% include "buttons/sort.html" with col='name' text='Chambre' %}</th>
<th>Commentaire</th> <th>Commentaire</th>
<th></th> <th></th>
</tr> </tr>
......
...@@ -25,12 +25,12 @@ with this program; if not, write to the Free Software Foundation, Inc., ...@@ -25,12 +25,12 @@ with this program; if not, write to the Free Software Foundation, Inc.,
<table class="table table-striped"> <table class="table table-striped">
<thead> <thead>
<tr> <tr>
<th>Port</th> <th>{% include "buttons/sort.html" with col='port' text='Port' %}</th>
<th>Room</th> <th>{% include "buttons/sort.html" with col='room' text='Room' %}</th>
<th>Interface machine</th> <th>{% include "buttons/sort.html" with col='interface' text='Interface machine' %}</th>
<th>Related</th> <th>{% include "buttons/sort.html" with col='related' text='Related' %}</th>
<th>Radius</th> <th>{% include "buttons/sort.html" with col='radius' text='Radius' %}</th>
<th>Vlan forcé</th> <th>{% include "buttons/sort.html" with col='vlan' text='Vlan forcé' %}</th>
<th>Détails</th> <th>Détails</th>
<th></th> <th></th>
</tr> </tr>
......
...@@ -25,9 +25,9 @@ with this program; if not, write to the Free Software Foundation, Inc., ...@@ -25,9 +25,9 @@ with this program; if not, write to the Free Software Foundation, Inc.,
<table class="table table-striped"> <table class="table table-striped">
<thead> <thead>
<tr> <tr>
<th>Stack</th> <th>{% include "buttons/sort.html" with col='name' text='Stack' %}</th>
<th>ID</th> <th>{% include "buttons/sort.html" with col='id' text='ID' %}</th>
<th>Details</th> <th>Détails</th>
<th>Membres</th> <th>Membres</th>
</tr> </tr>
</thead> </thead>
......
...@@ -25,12 +25,12 @@ with this program; if not, write to the Free Software Foundation, Inc., ...@@ -25,12 +25,12 @@ with this program; if not, write to the Free Software Foundation, Inc.,
<table class="table table-striped"> <table class="table table-striped">
<thead> <thead>
<tr> <tr>
<th>Dns</th> <th>{% include "buttons/sort.html" with col='dns' text='Dns' %}</th>
<th>Ipv4</th> <th>{% include "buttons/sort.html" with col='ip' text='Ipv4' %}</th>
<th>Localisation</th> <th>{% include "buttons/sort.html" with col='loc' text='Localisation' %}</th>
<th>Ports</th> <th>{% include "buttons/sort.html" with col='ports' text='Ports' %}</th>
<th>Stack</th> <th>{% include "buttons/sort.html" with col='stack' text='Stack' %}</th>
<th>id interne Stack</th> <th>Id interne stack</th>
<th>Détails</th> <th>Détails</th>
<th></th> <th></th>
</tr> </tr>
......
...@@ -49,7 +49,7 @@ from topologie.models import Switch, Port, Room, Stack ...@@ -49,7 +49,7 @@ from topologie.models import Switch, Port, Room, Stack
from topologie.forms import EditPortForm, NewSwitchForm, EditSwitchForm from topologie.forms import EditPortForm, NewSwitchForm, EditSwitchForm
from topologie.forms import AddPortForm, EditRoomForm, StackForm from topologie.forms import AddPortForm, EditRoomForm, StackForm
from users.views import form from users.views import form
from re2o.utils import SortTable
from machines.forms import DomainForm, NewMachineForm, EditMachineForm, EditInterfaceForm, AddInterfaceForm from machines.forms import DomainForm, NewMachineForm, EditMachineForm, EditInterfaceForm, AddInterfaceForm
from machines.views import generate_ipv4_mbf_param from machines.views import generate_ipv4_mbf_param
from preferences.models import AssoOption, GeneralOption from preferences.models import AssoOption, GeneralOption
...@@ -59,15 +59,17 @@ from preferences.models import AssoOption, GeneralOption ...@@ -59,15 +59,17 @@ from preferences.models import AssoOption, GeneralOption
@permission_required('cableur') @permission_required('cableur')
def index(request): def index(request):
""" Vue d'affichage de tous les swicthes""" """ Vue d'affichage de tous les swicthes"""
switch_list = Switch.objects.order_by( switch_list = Switch.objects\
'stack',
'stack_member_id',
'location'
)\
.select_related('switch_interface__domain__extension')\ .select_related('switch_interface__domain__extension')\
.select_related('switch_interface__ipv4')\ .select_related('switch_interface__ipv4')\
.select_related('switch_interface__domain')\ .select_related('switch_interface__domain')\
.select_related('stack') .select_related('stack')
switch_list = SortTable.sort(
switch_list,
request.GET.get('col'),
request.GET.get('order'),
SortTable.TOPOLOGIE_INDEX
)
return render(request, 'topologie/index.html', { return render(request, 'topologie/index.html', {
'switch_list': switch_list 'switch_list': switch_list
}) })
...@@ -137,8 +139,13 @@ def index_port(request, switch_id): ...@@ -137,8 +139,13 @@ def index_port(request, switch_id):
.select_related('machine_interface__domain__extension')\ .select_related('machine_interface__domain__extension')\
.select_related('machine_interface__machine__user')\ .select_related('machine_interface__machine__user')\
.select_related('related__switch__switch_interface__domain__extension')\ .select_related('related__switch__switch_interface__domain__extension')\
.select_related('switch')\ .select_related('switch')
.order_by('port') port_list = SortTable.sort(
port_list,
request.GET.get('col'),
request.GET.get('order'),
SortTable.TOPOLOGIE_INDEX_PORT
)
return render(request, 'topologie/index_p.html', { return render(request, 'topologie/index_p.html', {
'port_list': port_list, 'port_list': port_list,
'id_switch': switch_id, 'id_switch': switch_id,
...@@ -151,6 +158,12 @@ def index_port(request, switch_id): ...@@ -151,6 +158,12 @@ def index_port(request, switch_id):
def index_room(request): def index_room(request):
""" Affichage de l'ensemble des chambres""" """ Affichage de l'ensemble des chambres"""
room_list = Room.objects.order_by('name') room_list = Room.objects.order_by('name')
room_list = SortTable.sort(
room_list,
request.GET.get('col'),
request.GET.get('order'),
SortTable.TOPOLOGIE_INDEX_ROOM
)
options, _created = GeneralOption.objects.get_or_create() options, _created = GeneralOption.objects.get_or_create()
pagination_number = options.pagination_number pagination_number = options.pagination_number
paginator = Paginator(room_list, pagination_number) paginator = Paginator(room_list, pagination_number)
...@@ -172,8 +185,14 @@ def index_room(request): ...@@ -172,8 +185,14 @@ def index_room(request):
@permission_required('infra') @permission_required('infra')
def index_stack(request): def index_stack(request):
"""Affichage de la liste des stacks (affiche l'ensemble des switches)""" """Affichage de la liste des stacks (affiche l'ensemble des switches)"""
stack_list = Stack.objects.order_by('name')\ stack_list = Stack.objects\
.prefetch_related('switch_set__switch_interface__domain__extension') .prefetch_related('switch_set__switch_interface__domain__extension')
stack_list = SortTable.sort(
stack_list,
request.GET.get('col'),
request.GET.get('order'),
SortTable.TOPOLOGIE_INDEX_STACK
)
return render(request, 'topologie/index_stack.html', { return render(request, 'topologie/index_stack.html', {
'stack_list': stack_list 'stack_list': stack_list
}) })
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment