~sielibre/schooltool.ark/2.10_packaging

« back to all changes in this revision

Viewing changes to src/schooltool/ark/browser/assessment.py

  • Committer: Douglas Cerna
  • Date: 2016-04-28 05:25:57 UTC
  • mfrom: (6.1.65 2.10)
  • Revision ID: douglascerna@yahoo.com-20160428052557-x29i2qtnncc96ik2
New release.

Show diffs side-by-side

added added

removed removed

Lines of Context:
51
51
from schooltool.app.browser.app import ActiveSchoolYearContentMixin
52
52
from schooltool.app.browser.cal import CalendarViewBase
53
53
from schooltool.app.interfaces import IApplicationPreferences
 
54
from schooltool.app.interfaces import IRelationshipStateContainer
54
55
from schooltool.app.interfaces import ISchoolToolApplication
55
56
from schooltool.app.membership import Membership
56
57
from schooltool.basicperson.browser.demographics import (
57
58
    FlourishReorderDemographicsView
58
59
)
59
60
from schooltool.basicperson.person import StudentLevels
 
61
from schooltool.common import DateRange
60
62
from schooltool.common import SchoolToolMessage as STMessage
61
63
from schooltool.common import getResourceURL
62
64
from schooltool.course.interfaces import ICourse
77
79
from schooltool.lyceum.journal.journal import StudentAMRequirement
78
80
from schooltool.lyceum.journal.journal import StudentPMRequirement
79
81
from schooltool.relationship.temporal import ACTIVE
 
82
from schooltool.relationship.temporal import ACTIVE_CODE
 
83
from schooltool.relationship.temporal import INACTIVE_CODE
80
84
from schooltool.report.report import ReportLinkViewlet
81
85
from schooltool.requirement.interfaces import IDiscreteValuesScoreSystem
82
86
from schooltool.requirement.scoresystem import UNSCORED
910
914
        else:
911
915
            return 'c_below33'
912
916
 
 
917
    def level_students(self, level, comparison_date_range):
 
918
        rel = StudentLevels.bind(level=level).all().relationships
 
919
        result = set()
 
920
        for link_info in rel:
 
921
            state_accessor = link_info.state
 
922
            if state_accessor:
 
923
                date_ranges = self.convert_to_date_ranges(state_accessor.all())
 
924
                for date_range in date_ranges:
 
925
                    if date_range.overlaps(comparison_date_range):
 
926
                        result.add(link_info.target)
 
927
                        break
 
928
        return result
 
929
 
 
930
    def convert_to_date_ranges(self, states):
 
931
        result = []
 
932
        app = ISchoolToolApplication(None)
 
933
        container = IRelationshipStateContainer(app)
 
934
        app_states = container['student-levels']
 
935
        first = None
 
936
        for date, meaning, code in states:
 
937
            try:
 
938
                state = app_states.getState((meaning, code))
 
939
                if ACTIVE_CODE in state.active:
 
940
                    if first is None:
 
941
                        first = date
 
942
                elif INACTIVE_CODE in state.active:
 
943
                    if first is not None:
 
944
                        result.append(
 
945
                            DateRange(first, date - datetime.date.resolution)
 
946
                        )
 
947
                        first = None
 
948
            except:
 
949
                pass
 
950
        return result
 
951
 
913
952
 
914
953
class OverallReportBase(ExcelExportView,
915
954
                        CalendarViewBase):