Ignore:
Timestamp:
11 Feb 2020, 07:26:29 (5 years ago)
Author:
Henrik Bettermann
Message:

Add UpdateCourseTicketsView.

Location:
main/waeup.kofa/trunk/src/waeup/kofa/students
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • main/waeup.kofa/trunk/src/waeup/kofa/students/interfaces.py

    r15889 r15998  
    180180        """
    181181
     182    def updateCourseTickets(course):
     183        """Udate registered course tickets if course
     184        attributes were changed.
     185        """
     186
    182187class IStudentsContainer(IKofaObject):
    183188    """A students container contains university students.
  • main/waeup.kofa/trunk/src/waeup/kofa/students/tests/test_browser.py

    r15986 r15998  
    23752375            in self.browser.contents)
    23762376
     2377    def test_update_coursetickets(self):
     2378        IWorkflowState(self.student).setState('school fee paid')
     2379        studylevel = createObject(u'waeup.StudentStudyLevel')
     2380        studylevel.level = 100
     2381        studylevel.level_session = 2015
     2382        self.student['studycourse'].entry_mode = 'ug_ft'
     2383        self.student['studycourse'].addStudentStudyLevel(
     2384            self.certificate, studylevel)
     2385        self.browser.addHeader('Authorization', 'Basic mgr:mgrpw')
     2386        self.browser.open(
     2387            'http://localhost/app/faculties/fac1/dep1/courses/COURSE1/')
     2388        self.assertFalse(
     2389            'Update session 2015/2016 credits' in self.browser.contents)
     2390        self.app['configuration'].current_academic_session = 2015
     2391        self.browser.open(
     2392            'http://localhost/app/faculties/fac1/dep1/courses/COURSE1/')
     2393        self.browser.getLink("Update session 2015/2016 credits").click()
     2394        self.assertTrue(
     2395            'No course ticket found.' in self.browser.contents)
     2396        logfile = os.path.join(
     2397            self.app['datacenter'].storage, 'logs', 'main.log')
     2398        logcontent = open(logfile).read()
     2399        self.assertTrue(
     2400            'zope.mgr - browser.pages.UpdateCourseTicketsView - '
     2401            'course tickets updated: COURSE1' in logcontent)
     2402        studylevel['COURSE1'].credits = 12
     2403        self.browser.getLink("Update session 2015/2016 credits").click()
     2404        self.assertTrue(
     2405            'No course ticket found.' in self.browser.contents)
     2406        studylevel.level_session = 2015
     2407        self.student['studycourse'].current_session = 2015
     2408        self.browser.getLink("Update session 2015/2016 credits").click()
     2409        self.assertTrue(
     2410            '1 course ticket(s) updated.' in self.browser.contents)
     2411        logfile = os.path.join(
     2412            self.app['datacenter'].storage, 'logs', 'students.log')
     2413        logcontent = open(logfile).read()
     2414        self.assertTrue(
     2415            'zope.mgr - students.utils.StudentsUtils - '
     2416            'K1000000 100/COURSE1 credits updated (10->12)' in logcontent)
     2417        return
     2418
    23772419
    23782420class StudentUITests(StudentsFullSetup):
  • main/waeup.kofa/trunk/src/waeup/kofa/students/utils.py

    r15988 r15998  
    3232from zope.event import notify
    3333from zope.schema.interfaces import ConstraintNotSatisfied
    34 from zope.component import getUtility, createObject
     34from zope.component import getUtility, createObject, queryUtility
     35from zope.catalog.interfaces import ICatalog
    3536from zope.formlib.form import setUpEditWidgets
    3637from zope.i18n import translate
     
    11481149        return pdf_stream
    11491150
     1151    def updateCourseTickets(self, course):
     1152        """Udate course tickets if course attributes were changed.
     1153        """
     1154        current_academic_session = grok.getSite()[
     1155            'configuration'].current_academic_session
     1156        if not current_academic_session:
     1157            return
     1158        cat = queryUtility(ICatalog, name='coursetickets_catalog')
     1159        coursetickets = cat.searchResults(
     1160            code=(course.code, course.code),
     1161            session=(current_academic_session,current_academic_session))
     1162        number = 0
     1163        ob_class = self.__implemented__.__name__.replace('waeup.kofa.', '')
     1164        for ticket in coursetickets:
     1165            if ticket.credits == course.credits:
     1166                continue
     1167            if ticket.student.current_session != current_academic_session:
     1168                continue
     1169            if ticket.student.state not in (PAID,):
     1170                continue
     1171            number += 1
     1172            ticket.student.__parent__.logger.info(
     1173                '%s - %s %s/%s credits updated (%s->%s)' % (
     1174                    ob_class, ticket.student.student_id,
     1175                    ticket.level, ticket.code, course.credits,
     1176                    ticket.credits))
     1177            ticket.credits = course.credits
     1178        return number
     1179
    11501180    #: A dictionary which maps widget names to headlines. The headline
    11511181    #: is rendered in forms and on pdf slips above the respective
Note: See TracChangeset for help on using the changeset viewer.