Ignore:
Timestamp:
6 May 2012, 14:33:14 (12 years ago)
Author:
uli
Message:

Add payments exporter.

File:
1 edited

Legend:

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

    r8342 r8371  
    2424from waeup.kofa.interfaces import MessageFactory as _
    2525from waeup.kofa.students.interfaces import (
    26     IStudent, IStudentStudyCourse, IStudentStudyLevel, ICourseTicket)
     26    IStudent, IStudentStudyCourse, IStudentStudyLevel, ICourseTicket,
     27    IStudentOnlinePayment)
    2728from waeup.kofa.utils.batching import ExporterBase
    2829from waeup.kofa.utils.helpers import iface_names
     
    248249        return self.export(tickets, filepath)
    249250
     251class PaymentsExporter(grok.GlobalUtility, ExporterBase):
     252    """Exporter for OnlinePayment instances.
     253    """
     254    grok.implements(ICSVExporter)
     255    grok.name('studentpayments')
     256
     257    #: Fieldnames considered by this exporter
     258    fields = tuple(
     259        sorted(['reg_number', 'matric_number'] +
     260               iface_names(IStudentOnlinePayment, exclude_attribs=False)))
     261
     262    #: The title under which this exporter will be displayed
     263    title = _(u'Course Tickets')
     264
     265    def mangle_value(self, value, name, context=None):
     266        """Treat location values special.
     267        """
     268        if context is not None:
     269            student = context.getStudent()
     270            if name in ['reg_number', 'matric_number'] and student is not None:
     271                value = getattr(student, name, None)
     272        return super(
     273            PaymentsExporter, self).mangle_value(
     274            value, name, context=context)
     275
     276    def export(self, payments, filepath=None):
     277        """Export `payments`, an iterable, as CSV file.
     278
     279        If `filepath` is ``None``, a raw string with CSV data is returned.
     280        """
     281        writer, outfile = self.get_csv_writer(filepath)
     282        for payment in payments:
     283            self.write_item(payment, writer)
     284        return self.close_outfile(filepath, outfile)
     285
     286    def export_all(self, site, filepath=None):
     287        """Export payments into filepath as CSV data.
     288
     289        If `filepath` is ``None``, a raw string with CSV data is returned.
     290        """
     291        catalog = queryUtility(
     292            ICatalog, context=site, name='students_catalog', default=None)
     293        if catalog is None:
     294            return self.export([], filepath)
     295        students = catalog.searchResults(
     296            student_id=(None, None))
     297        payments = []
     298        for student in students:
     299            if not 'payments' in student.keys():
     300                continue
     301            for payment in student['payments'].values():
     302                payments.append(payment)
     303        return self.export(payments, filepath)
Note: See TracChangeset for help on using the changeset viewer.