Project

General

Profile

Revision 80fa03cd

ID80fa03cdb1de82555353ddad27d9cc3926b93978
Parent 5cb28e04
Child dcf1a18b

Added by Francois POIROTTE over 9 years ago

[#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 <>
Reviewed-by: Thomas BURGUIERE <>

View differences:

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