Projet

Général

Profil

Télécharger (2,37 ko) Statistiques
| Branche: | Tag: | Révision:

calebasse / calebasse / ressources / lookups.py @ 3355038a

1
# -*- coding: utf-8 -*-
2
import itertools
3

    
4
from calebasse.lookups import CalebasseLookup
5
from calebasse.personnes.models import Worker
6
from calebasse.ressources.models import Service, School
7

    
8
class FakeGroup:
9
    pk = None
10
    label = None
11

    
12
    def __init__(self, pk, label):
13
        self.pk = pk
14
        self.label = label
15

    
16
    def __unicode__(self):
17
        return u'Groupe: %s' % self.label
18

    
19

    
20
class WorkerOrGroupLookup(CalebasseLookup):
21
    model = Worker
22
    search_field = 'last_name'
23
    enabled = True
24

    
25
    def get_query(self, q, request):
26
        service = None
27
        if q.startswith('group:'):
28
            service = Service.objects.get(pk=int(q[6:]))
29
        else:
30
            try:
31
                service = Service.objects.get(name__iexact=q)
32
            except Service.DoesNotExist:
33
                pass
34

    
35
        if service:
36
            kwargs = { "%s__istartswith" % self.search_field : q }
37
            group = FakeGroup('group:%s' % service.id, service.name)
38
            return itertools.chain([group], self.model.objects.for_service(service.id).order_by('last_name'))
39

    
40
        kwargs = { "%s__istartswith" % self.search_field : q }
41
        if self.enabled:
42
            return self.model.objects.filter(enabled=True).filter(**kwargs).order_by('last_name')
43
        return self.model.objects.filter(**kwargs).order_by('last_name')
44

    
45
    def get_result(self, obj):
46
        return self.format_item_display(obj)
47

    
48
    def format_match(self, obj):
49
        return self.format_item_display(obj)
50

    
51
    def format_item_display(self,obj):
52
        if isinstance(obj, FakeGroup):
53
            text = obj.label
54
        else:
55
            text = obj.last_name.upper() + ' ' + obj.first_name
56
        return unicode(text)
57

    
58
class AllWorkerOrGroupLookup(WorkerOrGroupLookup):
59
    enabled = False
60

    
61
class SchoolLookup(CalebasseLookup):
62
    model = School
63
    search_field = 'name'
64

    
65
    def get_result(self, obj):
66
        return self.format_item_display(obj)
67

    
68
    def format_match(self, obj):
69
        return self.format_item_display(obj)
70

    
71
    def format_item_display(self, obj):
72
        text = ''
73
        if obj.school_type.name != 'Inconnu':
74
            text = unicode(obj.school_type) + ' ' + obj.name
75
        else:
76
            text = obj.name
77
        if obj.address:
78
            text += " - "  + obj.address
79
        if obj.private:
80
            text += " (Privé)"
81
        else:
82
            text +=  " (Public)"
83
        return text
84

    
(3-3/7)