Ignore:
Timestamp:
26 Oct 2012, 17:57:26 (12 years ago)
Author:
Henrik Bettermann
Message:

Implement BedTicketsExporter?.

File:
1 edited

Legend:

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

    r9420 r9427  
    2424from waeup.kofa.students.interfaces import (
    2525    IStudent, IStudentStudyCourse, IStudentStudyLevel, ICourseTicket,
    26     IStudentOnlinePayment, ICSVStudentExporter)
     26    IStudentOnlinePayment, ICSVStudentExporter, IBedTicket)
    2727from waeup.kofa.utils.batching import ExporterBase
    2828from waeup.kofa.utils.helpers import iface_names
     
    7676    return payments
    7777
     78def get_bedtickets(students):
     79    """Get all bedtickets of `students`.
     80    """
     81    tickets = []
     82    for student in students:
     83        for ticket in student.get('accommodation', {}).values():
     84            tickets.append(ticket)
     85    return tickets
    7886
    7987class StudentExporterBase(ExporterBase):
     
    273281    def export_student(self, student, filepath=None):
    274282        return self.export(get_payments([student]), filepath)
     283
     284class BedTicketsExporter(grok.GlobalUtility, StudentExporterBase):
     285    """Exporter for BedTicket instances.
     286    """
     287    grok.name('bedtickets')
     288
     289    #: Fieldnames considered by this exporter
     290    fields = tuple(
     291        sorted(iface_names(
     292            IBedTicket, exclude_attribs=False))) + (
     293                'student_id', 'actual_bed_type')
     294
     295    #: The title under which this exporter will be displayed
     296    title = _(u'Bed Tickets')
     297
     298    def mangle_value(self, value, name, context=None):
     299        """Treat location values and others special.
     300        """
     301        if context is not None:
     302            student = context.student
     303            if name in ['student_id'] and student is not None:
     304                value = getattr(student, name, None)
     305        if name == 'bed' and value is not None:
     306            value = getattr(value, 'bed_id', None)
     307        if name == 'actual_bed_type':
     308            value = getattr(getattr(context, 'bed', None), 'bed_type')
     309        return super(
     310            BedTicketsExporter, self).mangle_value(
     311            value, name, context=context)
     312
     313    def export_all(self, site, filepath=None):
     314        """Export payments into filepath as CSV data.
     315
     316        If `filepath` is ``None``, a raw string with CSV data is returned.
     317        """
     318        return self.export(get_bedtickets(get_students(site)), filepath)
     319
     320    def export_student(self, student, filepath=None):
     321        return self.export(get_bedtickets([student]), filepath)
Note: See TracChangeset for help on using the changeset viewer.