Ignore:
Timestamp:
4 Jul 2014, 07:46:16 (10 years ago)
Author:
Henrik Bettermann
Message:

Filter payment ticket data exports by specifying the payment_date period.

File:
1 edited

Legend:

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

    r11702 r11730  
    9292    return tickets
    9393
    94 def get_payments(students):
    95     """Get all payments of `students`.
    96     """
     94def get_payments(students, paid=False, **kw):
     95    """Get all payments of `students` within given payment_date period.
     96
     97    """
     98    date_format = '%d/%m/%Y'
    9799    payments = []
    98     for student in students:
    99         for payment in student.get('payments', {}).values():
    100             payments.append(payment)
    101     return payments
    102 
    103 def get_paid_payments(students):
    104     """Get all paid payments of `students`.
    105     """
    106     payments = []
    107     for student in students:
    108         for payment in student.get('payments', {}).values():
    109             if payment.p_state == 'paid':
    110                 payments.append(payment)
     100    payments_start = kw.get('payments_start')
     101    payments_end = kw.get('payments_end')
     102    if payments_start and payments_end:
     103        # Payment period given
     104        payments_start = datetime.strptime(payments_start, date_format)
     105        payments_end = datetime.strptime(payments_end, date_format)
     106        if paid:
     107            # Only paid tickets in payment period are considered
     108            for student in students:
     109                for payment in student.get('payments', {}).values():
     110                    if payment.p_state == 'paid' and \
     111                        payment.payment_date > payments_start and \
     112                        payment.payment_date < payments_end:
     113                        payments.append(payment)
     114        else:
     115            # All tickets in payment period are considered
     116            for student in students:
     117                for payment in student.get('payments', {}).values():
     118                    if payment.payment_date > payments_start and \
     119                        payment.payment_date < payments_end:
     120                        payments.append(payment)
     121    else:
     122        # Payment period not given
     123        if paid:
     124            # Only paid tickets are considered
     125            for student in students:
     126                for payment in student.get('payments', {}).values():
     127                    if payment.p_state == 'paid':
     128                        payments.append(payment)
     129        else:
     130            # All tickets are considered
     131            for student in students:
     132                for payment in student.get('payments', {}).values():
     133                    payments.append(payment)
    111134    return payments
    112135
     
    156179                students.append(ticket.student)
    157180            return list(set(students))
     181        # Payments can be filtered by payment_date. The period boundaries
     182        # are not keys of the catalog and must thus be removed from kw.
     183        try:
     184            del kw['payments_start']
     185            del kw['payments_end']
     186        except KeyError:
     187            pass
    158188        query = StudentsQuery(**kw)
    159189        return query.query()
     
    316346
    317347    def filter_func(self, x, **kw):
    318         return get_payments(x)
     348        return get_payments(x, **kw)
    319349
    320350    def mangle_value(self, value, name, context=None):
     
    336366
    337367    def filter_func(self, x, **kw):
    338         return get_paid_payments(x)
     368        return get_payments(x, paid=True, **kw)
    339369
    340370    #: Fieldnames considered by this exporter
Note: See TracChangeset for help on using the changeset viewer.