Revision 80fa03cd
[#1258] Ordre de tri initial dans VigiBoard.
Permet la personnalisation par l'administrateur de l'ordre de tri appliqué
par défaut dans VigiBoard.
L'administrateur a accès à l'ensemble des champs fournis par les
greffons des colonnes et peut choisir pour chaque champ de trier par
ordre ascendant ou descendant.
Change-Id: Idf45dd2d4ac801e140a4cbbd1dec4ee0b9751098
Refs: #1258.
Reviewed-on: https://vigilo-dev.si.c-s.fr/review/1499
Tested-by: Build system <qa@vigilo-dev.si.c-s.fr>
Reviewed-by: Thomas BURGUIERE <thomas.burguiere@c-s.fr>
vigiboard/controllers/vigiboardrequest.py | ||
---|---|---|
20 | 20 |
|
21 | 21 |
"""Gestion de la requête, des plugins et de l'affichage du Vigiboard""" |
22 | 22 |
|
23 |
import logging |
|
23 | 24 |
from time import mktime |
24 | 25 |
|
25 | 26 |
from tg import config, tmpl_context, request, url |
26 | 27 |
from pylons.i18n import ugettext as _ |
27 |
from paste.deploy.converters import asbool
|
|
28 |
from paste.deploy.converters import aslist
|
|
28 | 29 |
|
29 | 30 |
from sqlalchemy import not_, and_, asc, desc |
30 | 31 |
from sqlalchemy.sql.expression import null as expr_null, union_all |
... | ... | |
36 | 37 |
from vigiboard.widgets.edit_event import EditEventForm |
37 | 38 |
from vigiboard.controllers.plugins import VigiboardRequestPlugin, INNER, ITEMS |
38 | 39 |
|
40 |
LOGGER = logging.getLogger(__name__) |
|
41 |
|
|
39 | 42 |
class VigiboardRequest(): |
40 | 43 |
""" |
41 | 44 |
Classe gérant la génération de la requête finale, |
... | ... | |
163 | 166 |
# - VIGILO_EXIG_VIGILO_BAC_0050 |
164 | 167 |
# - VIGILO_EXIG_VIGILO_BAC_0060 |
165 | 168 |
self.orderby = [] |
169 |
plugins = config.get('columns_plugins', []) |
|
166 | 170 |
if sort: |
167 |
for _plugin, instance in config.get('columns_plugins', []):
|
|
171 |
for _plugin, instance in plugins:
|
|
168 | 172 |
criterion = instance.get_sort_criterion(self, sort) |
169 | 173 |
if criterion is not None: |
170 | 174 |
if order == 'asc': |
... | ... | |
172 | 176 |
else: |
173 | 177 |
self.orderby.append(desc(criterion)) |
174 | 178 |
|
175 |
# Permet de définir le sens de tri pour la priorité. |
|
176 |
if config['vigiboard_priority_order'] == 'asc': |
|
177 |
priority_order = asc(CorrEvent.priority) |
|
178 |
else: |
|
179 |
priority_order = desc(CorrEvent.priority) |
|
180 |
|
|
181 |
self.orderby.extend([ |
|
182 |
asc(CorrEvent.ack), # État acquittement |
|
183 |
asc(StateName.statename.in_([u'OK', u'UP'])), # Vert / Pas vert |
|
184 |
priority_order, # Priorité ITIL |
|
185 |
]) |
|
186 |
|
|
187 |
if asbool(config.get('state_first', True)): |
|
188 |
self.orderby.extend([ |
|
189 |
desc(StateName.order), # Etat courant |
|
190 |
desc(Event.timestamp), # Timestamp |
|
191 |
]) |
|
192 |
else: |
|
193 |
self.orderby.extend([ |
|
194 |
desc(Event.timestamp), # Timestamp |
|
195 |
desc(StateName.order), # Etat courant |
|
196 |
]) |
|
179 |
default_sort = aslist(config.get('default_sort', '')) |
|
180 |
for sort_column in default_sort: |
|
181 |
criterion = None |
|
182 |
sort_field, _dummy, sort_order = sort_column.partition(':') |
|
183 |
for _plugin, instance in plugins: |
|
184 |
criterion = instance.get_sort_criterion(self, sort_field) |
|
185 |
if criterion is not None: |
|
186 |
if sort_order == 'desc': |
|
187 |
self.orderby.append(desc(criterion)) |
|
188 |
elif sort_order in ('asc', None): |
|
189 |
self.orderby.append(asc(criterion)) |
|
190 |
else: |
|
191 |
self.orderby.append(asc(criterion)) |
|
192 |
LOGGER.warn('Invalid sort order: "%s", sorting in ' |
|
193 |
'ascending order instead', sort_order) |
|
194 |
break |
|
195 |
if criterion is None: |
|
196 |
LOGGER.info('No such plugin: "%s"', sort_field) |
|
197 | 197 |
|
198 | 198 |
if search is not None: |
199 | 199 |
# 2nde passe pour les filtres : self.items est désormais défini. |
200 |
for _plugin, instance in config.get('columns_plugins', []):
|
|
200 |
for _plugin, instance in plugins:
|
|
201 | 201 |
instance.handle_search_fields(self, search, ITEMS, subqueries) |
202 | 202 |
|
203 | 203 |
if mask_closed_events: |
Also available in: Unified diff