From 719f70828666482b90a9229e44b9ac92827f78bf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ma=C3=ABl=20Kervella?= Date: Sun, 22 Oct 2017 00:33:44 +0000 Subject: [PATCH] Ajout du sort dans topo, logs, machines, cotisations MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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 ? --- .../cotisations/aff_cotisations.html | 6 +-- .../templates/cotisations/control.html | 12 ++--- cotisations/views.py | 25 ++++++--- logs/templates/logs/aff_stats_logs.html | 4 +- logs/templates/logs/aff_summary.html | 2 +- logs/views.py | 19 +++++-- machines/templates/machines/aff_machines.html | 4 +- machines/views.py | 11 +++- re2o/utils.py | 54 +++++++++++++++++++ .../templates/topologie/aff_chambres.html | 2 +- topologie/templates/topologie/aff_port.html | 12 ++--- topologie/templates/topologie/aff_stacks.html | 6 +-- topologie/templates/topologie/aff_switch.html | 12 ++--- topologie/views.py | 37 +++++++++---- 14 files changed, 153 insertions(+), 53 deletions(-) diff --git a/cotisations/templates/cotisations/aff_cotisations.html b/cotisations/templates/cotisations/aff_cotisations.html index e1ce251e..b9548a74 100644 --- a/cotisations/templates/cotisations/aff_cotisations.html +++ b/cotisations/templates/cotisations/aff_cotisations.html @@ -29,11 +29,11 @@ with this program; if not, write to the Free Software Foundation, Inc., - + - - + + diff --git a/cotisations/templates/cotisations/control.html b/cotisations/templates/cotisations/control.html index 1ccb804f..3282e29e 100644 --- a/cotisations/templates/cotisations/control.html +++ b/cotisations/templates/cotisations/control.html @@ -40,14 +40,14 @@ with this program; if not, write to the Free Software Foundation, Inc., - - + + - - - - + + + + {% for form in controlform.forms %} diff --git a/cotisations/views.py b/cotisations/views.py index 4e2c5304..f0481996 100644 --- a/cotisations/views.py +++ b/cotisations/views.py @@ -40,6 +40,7 @@ from users.models import User from re2o.settings import LOGO_PATH from re2o import settings from re2o.views import form +from re2o.utils import SortTable from preferences.models import OptionalUser, AssoOption, GeneralOption from .models import Facture, Article, Vente, Paiement, Banque from .forms import NewFactureForm, TrezEditFactureForm, EditFactureForm @@ -519,7 +520,13 @@ def control(request): factures.Case à cocher, pratique""" options, _created = GeneralOption.objects.get_or_create() 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( Facture, fields=('control', 'valid'), @@ -533,11 +540,7 @@ def control(request): facture_list = paginator.page(1) except EmptyPage: facture_list = paginator.page(paginator.num.pages) - page_query = Facture.objects.order_by('date').select_related('user')\ - .select_related('paiement').reverse().filter( - id__in=[facture.id for facture in facture_list] - ) - controlform = controlform_set(request.POST or None, queryset=page_query) + controlform = controlform_set(request.POST or None, queryset=facture_list.object_list) if controlform.is_valid(): with transaction.atomic(), reversion.create_revision(): controlform.save() @@ -586,8 +589,14 @@ def index(request): """Affiche l'ensemble des factures, pour les cableurs et +""" options, _created = GeneralOption.objects.get_or_create() pagination_number = options.pagination_number - facture_list = Facture.objects.order_by('date').select_related('user')\ - .select_related('paiement').prefetch_related('vente_set').reverse() + facture_list = Facture.objects.select_related('user')\ + .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) page = request.GET.get('page') try: diff --git a/logs/templates/logs/aff_stats_logs.html b/logs/templates/logs/aff_stats_logs.html index 35504144..b0fa2b14 100644 --- a/logs/templates/logs/aff_stats_logs.html +++ b/logs/templates/logs/aff_stats_logs.html @@ -33,8 +33,8 @@ with this program; if not, write to the Free Software Foundation, Inc., - - + + diff --git a/logs/templates/logs/aff_summary.html b/logs/templates/logs/aff_summary.html index 9b791dfd..a00c4e27 100644 --- a/logs/templates/logs/aff_summary.html +++ b/logs/templates/logs/aff_summary.html @@ -31,7 +31,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
Utilisateur{% include "buttons/sort.html" with col='user' text='Utilisateur' %} Designation Prix totalMoyen de paiementDate{% include "buttons/sort.html" with col='paiement' text='Moyen de paiement' %}{% include "buttons/sort.html" with col='date' text='Date' %}
ProfilNomPrénom{% include "buttons/sort.html" with col='name' text='Nom' %}{% include "buttons/sort.html" with col='surname' text='Prénom' %} Designation Prix totalMoyen de paiementDateValiditéControle trésorier{% include "buttons/sort.html" with col='paiement' text='Moyen de paiement' %}{% include "buttons/sort.html" with col='date' text='Date' %}{% include "buttons/sort.html" with col='valid' text='Valide' %}{% include "buttons/sort.html" with col='control' text='Contrôlée' %}
Objet modifié Type de l'objetModification parDate de modification{% include "buttons/sort.html" with col='author' text='Modification par' %}{% include "buttons/sort.html" with col='date' text='Date de modification' %} Commentaire
- + diff --git a/logs/views.py b/logs/views.py index e21d4de6..d14dac68 100644 --- a/logs/views.py +++ b/logs/views.py @@ -57,7 +57,7 @@ from preferences.models import GeneralOption from re2o.views import form 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_interfaces_count +from re2o.utils import all_active_interfaces_count, SortTable STATS_DICT = { 0: ["Tout", 36], @@ -83,7 +83,13 @@ def index(request): content_type__in=ContentType.objects.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) page = request.GET.get('page') try: @@ -129,9 +135,14 @@ def stats_logs(request): classés par date croissante, en vrac""" options, _created = GeneralOption.objects.get_or_create() pagination_number = options.pagination_number - revisions = Revision.objects.all().order_by('date_created')\ - .reverse().select_related('user')\ + revisions = Revision.objects.all().select_related('user')\ .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) page = request.GET.get('page') try: diff --git a/machines/templates/machines/aff_machines.html b/machines/templates/machines/aff_machines.html index 80e887d2..93720997 100644 --- a/machines/templates/machines/aff_machines.html +++ b/machines/templates/machines/aff_machines.html @@ -35,7 +35,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 %}
Date{% include "buttons/sort.html" with col='date' text='Date' %} Modification
Nom DNS{% include "buttons/sort.html" with col='name' text='Nom DNS' %} Type MAC IP
- {{ machine.name }} + {{ machine.name|default:'Pas de nom' }} {{ machine.user }} diff --git a/machines/views.py b/machines/views.py index 1271e277..2f533de1 100644 --- a/machines/views.py +++ b/machines/views.py @@ -114,7 +114,8 @@ from preferences.models import GeneralOption, OptionalMachine from re2o.utils import ( all_active_assigned_interfaces, all_has_access, - filter_active_interfaces + filter_active_interfaces, + SortTable ) from re2o.views import form @@ -885,7 +886,13 @@ def del_nas(request): def index(request): options, created = GeneralOption.objects.get_or_create() 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) page = request.GET.get('page') try: diff --git a/re2o/utils.py b/re2o/utils.py index 28d6cf0d..369bc058 100644 --- a/re2o/utils.py +++ b/re2o/utils.py @@ -171,6 +171,60 @@ class SortTable: 'end': '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 def sort(request, col, order, criterion): diff --git a/topologie/templates/topologie/aff_chambres.html b/topologie/templates/topologie/aff_chambres.html index d3393fc2..8ac3e5d8 100644 --- a/topologie/templates/topologie/aff_chambres.html +++ b/topologie/templates/topologie/aff_chambres.html @@ -29,7 +29,7 @@ with this program; if not, write to the Free Software Foundation, Inc., - + diff --git a/topologie/templates/topologie/aff_port.html b/topologie/templates/topologie/aff_port.html index 609d4349..16b4f258 100644 --- a/topologie/templates/topologie/aff_port.html +++ b/topologie/templates/topologie/aff_port.html @@ -25,12 +25,12 @@ with this program; if not, write to the Free Software Foundation, Inc.,
Chambre{% include "buttons/sort.html" with col='name' text='Chambre' %} Commentaire
- - - - - - + + + + + + diff --git a/topologie/templates/topologie/aff_stacks.html b/topologie/templates/topologie/aff_stacks.html index 586fd90a..b3ac49ba 100644 --- a/topologie/templates/topologie/aff_stacks.html +++ b/topologie/templates/topologie/aff_stacks.html @@ -25,9 +25,9 @@ with this program; if not, write to the Free Software Foundation, Inc.,
PortRoomInterface machineRelatedRadiusVlan forcé{% include "buttons/sort.html" with col='port' text='Port' %}{% include "buttons/sort.html" with col='room' text='Room' %}{% include "buttons/sort.html" with col='interface' text='Interface machine' %}{% include "buttons/sort.html" with col='related' text='Related' %}{% include "buttons/sort.html" with col='radius' text='Radius' %}{% include "buttons/sort.html" with col='vlan' text='Vlan forcé' %} Détails
- - - + + + diff --git a/topologie/templates/topologie/aff_switch.html b/topologie/templates/topologie/aff_switch.html index 611e6c39..894e89a4 100644 --- a/topologie/templates/topologie/aff_switch.html +++ b/topologie/templates/topologie/aff_switch.html @@ -25,12 +25,12 @@ with this program; if not, write to the Free Software Foundation, Inc.,
StackIDDetails{% include "buttons/sort.html" with col='name' text='Stack' %}{% include "buttons/sort.html" with col='id' text='ID' %}Détails Membres
- - - - - - + + + + + + diff --git a/topologie/views.py b/topologie/views.py index 5eb2de74..e4f928be 100644 --- a/topologie/views.py +++ b/topologie/views.py @@ -49,7 +49,7 @@ from topologie.models import Switch, Port, Room, Stack from topologie.forms import EditPortForm, NewSwitchForm, EditSwitchForm from topologie.forms import AddPortForm, EditRoomForm, StackForm from users.views import form - +from re2o.utils import SortTable from machines.forms import DomainForm, NewMachineForm, EditMachineForm, EditInterfaceForm, AddInterfaceForm from machines.views import generate_ipv4_mbf_param from preferences.models import AssoOption, GeneralOption @@ -59,15 +59,17 @@ from preferences.models import AssoOption, GeneralOption @permission_required('cableur') def index(request): """ Vue d'affichage de tous les swicthes""" - switch_list = Switch.objects.order_by( - 'stack', - 'stack_member_id', - 'location' - )\ + switch_list = Switch.objects\ .select_related('switch_interface__domain__extension')\ .select_related('switch_interface__ipv4')\ .select_related('switch_interface__domain')\ .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', { 'switch_list': switch_list }) @@ -137,8 +139,13 @@ def index_port(request, switch_id): .select_related('machine_interface__domain__extension')\ .select_related('machine_interface__machine__user')\ .select_related('related__switch__switch_interface__domain__extension')\ - .select_related('switch')\ - .order_by('port') + .select_related('switch') + 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', { 'port_list': port_list, 'id_switch': switch_id, @@ -151,6 +158,12 @@ def index_port(request, switch_id): def index_room(request): """ Affichage de l'ensemble des chambres""" 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() pagination_number = options.pagination_number paginator = Paginator(room_list, pagination_number) @@ -172,8 +185,14 @@ def index_room(request): @permission_required('infra') def index_stack(request): """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') + 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', { 'stack_list': stack_list })
DnsIpv4LocalisationPortsStackid interne Stack{% include "buttons/sort.html" with col='dns' text='Dns' %}{% include "buttons/sort.html" with col='ip' text='Ipv4' %}{% include "buttons/sort.html" with col='loc' text='Localisation' %}{% include "buttons/sort.html" with col='ports' text='Ports' %}{% include "buttons/sort.html" with col='stack' text='Stack' %}Id interne stack Détails