~replaceafill/schooltool/schooltool.cando_auto_assignment

« back to all changes in this revision

Viewing changes to src/schooltool/cando/browser/gradebook.py

  • Committer: Douglas Cerna
  • Date: 2012-06-19 18:22:59 UTC
  • Revision ID: douglascerna@yahoo.com-20120619182259-fgg8s1oohpjvwybh
Added node filtering

Show diffs side-by-side

added added

removed removed

Lines of Context:
22
22
 
23
23
from zope.browserpage.viewpagetemplatefile import ViewPageTemplateFile
24
24
from zope.catalog.interfaces import ICatalog
 
25
from zope.component import getUtility
25
26
from zope.container.interfaces import INameChooser
26
27
from zope.i18n import translate
 
28
from zope.i18n.interfaces.locales import ICollator
 
29
from zope.interface import directlyProvides
 
30
from zope.intid.interfaces import IIntIds
27
31
from zope.location.location import LocationProxy
28
32
from zope.traversing.browser.absoluteurl import absoluteURL
29
33
from zope.security import proxy
30
34
import zc.table.column
 
35
from zc.table.interfaces import ISortableColumn
31
36
 
32
37
from z3c.form import form, field, button
33
38
 
53
58
from schooltool.cando.interfaces import ISectionSkills
54
59
from schooltool.cando.interfaces import IProjectsGradebook
55
60
from schooltool.cando.interfaces import ISkillSetContainer
 
61
from schooltool.cando.interfaces import INodeContainer
56
62
from schooltool.cando.interfaces import ISkillsGradebook
57
63
from schooltool.cando.interfaces import ISkill
58
64
from schooltool.cando.gradebook import ensureAtLeastOneProject
537
543
            name='label',
538
544
            title=_(u'Label'),
539
545
            getter=lambda i, f: i.label or '')
 
546
        directlyProvides(label, ISortableColumn)
540
547
        return [label] + default
541
548
 
 
549
    def sortOn(self):
 
550
        return (('label', False), ("title", False),)
 
551
 
542
552
 
543
553
class SkillsTableFilter(table.ajax.IndexedTableFilter):
544
554
 
550
560
        return self.manager.html_id+"-title"
551
561
 
552
562
    @property
 
563
    def search_group_id(self):
 
564
        return self.manager.html_id+"-group"
 
565
 
 
566
    @property
553
567
    def parameters(self):
554
 
        return (self.search_title_id,)
 
568
        return (self.search_title_id, self.search_group_id)
555
569
 
556
570
    def filter(self, items):
557
571
        if self.ignoreRequest:
558
572
            return items
 
573
        if self.search_group_id in self.request:
 
574
            group = self.groupContainer().get(self.request[self.search_group_id])
 
575
            if group:
 
576
                int_ids = getUtility(IIntIds)
 
577
                keys = set()
 
578
                for skillset in group.skillsets:
 
579
                    for skill in skillset.values():
 
580
                        keys.add(int_ids.queryId(skill))
 
581
                items = [item for item in items
 
582
                         if item['id'] in keys]
559
583
        if self.search_title_id in self.request:
560
584
            searchstr = self.request[self.search_title_id]
561
585
            query = buildQueryString(searchstr)
567
591
                items = [item for item in items
568
592
                         if item['id'] in result]
569
593
        return items
 
594
 
 
595
    def groupContainer(self):
 
596
        # XXX must know which group container to pick
 
597
        app = ISchoolToolApplication(None)
 
598
        return INodeContainer(app, {})
 
599
 
 
600
    def groups(self):
 
601
        groups = []
 
602
        container = self.groupContainer()
 
603
        collator = ICollator(self.request.locale)
 
604
        group_items = sorted(container.items(),
 
605
                             cmp=collator.cmp,
 
606
                             key=lambda (gid, g): g.title)
 
607
        for id, group in group_items:
 
608
            skills = []
 
609
            for skillset in group.skillsets:
 
610
                for skill in skillset.values():
 
611
                    skills.append(skill)
 
612
            if len(skills) > 0:
 
613
                groups.append({'id': id,
 
614
                               'title': "%s (%s)" % (group.title, len(skills))})
 
615
        return groups