8
0
Fork 0
mirror of https://gitlab2.federez.net/re2o/re2o synced 2024-12-26 08:53:46 +00:00

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 ?
This commit is contained in:
Maël Kervella 2017-10-22 00:33:44 +00:00
parent 75c586707b
commit 719f708286
14 changed files with 153 additions and 53 deletions

View file

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

View file

@ -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 %}

View file

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

View file

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

View file

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

View file

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

View file

@ -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.,
{% 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>

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

@ -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
@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):
.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):
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):
@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
}) })