Project

General

Profile

Revision 0921ffe3

ID0921ffe396c7c823441dc7ba1bcc2e4acb358aed
Parent ce8fee78
Child 0e700a76

Added by Francois POIROTTE over 9 years ago

[#1254] Colonne d'état dans VigiBoard.

Enrichi la colonne de détails dans VigiBoard pour permettre le tri et le
filtrage. Ceci reprend le contenu du plugin "state" développé
précédemment.

Corrige également plusieurs problèmes dans le code du plugin state.

Change-Id: I095aff1ca6833a00d01485a383ae33689d7f247e
Refs: #1254.
Reviewed-on: https://vigilo-dev.si.c-s.fr/review/1483
Tested-by: Build system <>
Reviewed-by: Thomas BURGUIERE <>
Reviewed-by: Francois POIROTTE <>

View differences:

vigiboard/controllers/plugins/details.py
26 26

  
27 27
import urllib
28 28
from tg import config, url, request
29
from pylons.i18n import lazy_ugettext as l_
30
import tw.forms as twf
29 31
from sqlalchemy.sql.expression import null as expr_null, union_all
30 32
from sqlalchemy import func
31 33

  
......
37 39
    StateName, Map, MapNode, MapNodeHost, MapGroup
38 40
from vigilo.models.tables.secondary_tables import MAP_GROUP_TABLE
39 41

  
40
from vigiboard.controllers.plugins import VigiboardRequestPlugin
42
from vigiboard.controllers.plugins import VigiboardRequestPlugin, ITEMS
43

  
41 44

  
42 45
class PluginDetails(VigiboardRequestPlugin):
43 46
    """
......
180 183
            'initial_state': init_state,
181 184
            'id': event[0].idcorrevent,
182 185
        }
186

  
187
    def get_search_fields(self):
188
        states = DBSession.query(StateName.idstatename, StateName.statename
189
                    ).order_by(StateName.order.asc()).all()
190
        options = [('', u'')] + \
191
                    [( str(s.idstatename), s.statename ) for s in states]
192
        return [
193
            twf.SingleSelectField(
194
                'state',
195
                label_text=l_('Current state'),
196
                options=options,
197
                validator=twf.validators.OneOf(
198
                    dict(options).keys(),
199
                    if_invalid=None,
200
                    if_missing=None,
201
                ),
202
            ),
203
        ]
204

  
205
    def handle_search_fields(self, query, search, state, subqueries):
206
        if state != ITEMS:
207
            return
208

  
209
        if search.get('state'):
210
            try:
211
                query.add_filter(Event.current_state == int(search['state']))
212
            except (ValueError, TypeError):
213
                # On ignore silencieusement le critère de recherche erroné.
214
                pass
215

  
216
    def get_sort_criterion(self, query, column):
217
        if column == 'state':
218
            return Event.current_state
219
        return None
220

  

Also available in: Unified diff