source: main/waeup.kofa/branches/uli-zc-async/src/waeup/kofa/students/payments.py @ 10687

Last change on this file since 10687 was 9211, checked in by uli, 12 years ago

Rollback r9209. Looks like multiple merges from trunk confuse svn when merging back into trunk.

  • Property svn:keywords set to Id
File size: 5.4 KB
RevLine 
[7191]1## $Id: payments.py 9211 2012-09-21 08:19:35Z uli $
2##
[6635]3## Copyright (C) 2011 Uli Fouquet & Henrik Bettermann
4## This program is free software; you can redistribute it and/or modify
5## it under the terms of the GNU General Public License as published by
6## the Free Software Foundation; either version 2 of the License, or
7## (at your option) any later version.
8##
9## This program is distributed in the hope that it will be useful,
10## but WITHOUT ANY WARRANTY; without even the implied warranty of
11## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12## GNU General Public License for more details.
13##
14## You should have received a copy of the GNU General Public License
15## along with this program; if not, write to the Free Software
16## Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
17##
18"""
[7599]19Student payment components.
[6635]20"""
21import grok
22from zope.component.interfaces import IFactory
[6875]23from zope.interface import implementedBy
[8420]24from waeup.kofa.interfaces import MessageFactory as _
[7811]25from waeup.kofa.students.interfaces import (
[6877]26    IStudentPaymentsContainer, IStudentNavigation, IStudentOnlinePayment)
[7811]27from waeup.kofa.payments import PaymentsContainer, OnlinePayment
[8703]28from waeup.kofa.payments.interfaces import IPaymentWebservice
[7811]29from waeup.kofa.utils.helpers import attrs_to_fields
[8420]30from waeup.kofa.accesscodes import create_accesscode
[6635]31
[6860]32class StudentPaymentsContainer(PaymentsContainer):
[6635]33    """This is a container for student payments.
34    """
[6860]35    grok.implements(IStudentPaymentsContainer, IStudentNavigation)
36    grok.provides(IStudentPaymentsContainer)
[6635]37
38    def __init__(self):
[6860]39        super(StudentPaymentsContainer, self).__init__()
[6635]40        return
41
[8736]42    @property
43    def student(self):
[6642]44        return self.__parent__
45
[8735]46    def writeLogMessage(self, view, message):
47        return self.__parent__.writeLogMessage(view, message)
48
[6875]49StudentPaymentsContainer = attrs_to_fields(StudentPaymentsContainer)
50
51class StudentOnlinePayment(OnlinePayment):
52    """This is an online payment.
53    """
[6877]54    grok.implements(IStudentOnlinePayment, IStudentNavigation)
55    grok.provides(IStudentOnlinePayment)
[6875]56
57    def __init__(self):
58        super(StudentOnlinePayment, self).__init__()
59        return
60
[8736]61    @property
62    def student(self):
[8368]63        try:
64            return self.__parent__.__parent__
65        except AttributeError:
66            return None
[6875]67
[8735]68    def writeLogMessage(self, view, message):
69        return self.__parent__.__parent__.writeLogMessage(view, message)
70
[8732]71    def _createActivationCodes(self):
[8736]72        student = self.student
[8420]73        if self.p_category == 'clearance':
74            # Create CLR access code
75            pin, error = create_accesscode(
76                'CLR',0,self.amount_auth,student.student_id)
77            if error:
[8732]78                return error
[8420]79            self.ac = pin
[8732]80        elif self.p_category in ('schoolfee', 'schoolfee_1'):
[8420]81            # Create SFE access code
82            pin, error = create_accesscode(
83                'SFE',0,self.amount_auth,student.student_id)
84            if error:
[8732]85                return error
[8420]86            self.ac = pin
87        elif self.p_category == 'bed_allocation':
88            # Create HOS access code
89            pin, error = create_accesscode(
90                'HOS',0,self.amount_auth,student.student_id)
91            if error:
[8732]92                return error
[8420]93            self.ac = pin
[8732]94        return None
95
96    def doAfterStudentPayment(self):
97        """Process student after payment was made.
98        """
[9211]99        error = self._createActivationCodes()
100        if error is not None:
101            return False, error, error
[8428]102        log = 'successful payment: %s' % self.p_id
103        msg = _('Successful payment')
104        return True, msg, log
[8420]105
[8453]106    def doAfterStudentPaymentApproval(self):
107        """Process student after payment was approved.
108        """
[9211]109        error = self._createActivationCodes()
110        if error is not None:
111            return False, error, error
[8453]112        log = 'payment approved: %s' % self.p_id
113        msg = _('Payment approved')
114        return True, msg, log
115
[8422]116    def approveStudentPayment(self):
117        """Approve payment and process student.
118        """
119        if self.p_state == 'paid':
[8428]120            return False, _('This ticket has already been paid.'), None
[8422]121        self.approve()
[8732]122        return self.doAfterStudentPaymentApproval()
[8422]123
124
[6875]125StudentOnlinePayment = attrs_to_fields(StudentOnlinePayment)
126
[8703]127class PaymentWebservice(grok.Adapter):
128    """An adapter to publish student data through a webservice.
129    """
130    grok.context(IStudentOnlinePayment)
131    grok.implements(IPaymentWebservice)
132
133    @property
[8708]134    def display_fullname(self):
135        "Name of  payee."
[8736]136        return self.context.student.display_fullname
[8703]137
[8708]138    @property
139    def id(self):
140        "Id of payee"
[8736]141        return self.context.student.student_id
[8708]142
143    @property
144    def faculty(self):
145        "Faculty of payee"
[8736]146        return self.context.student.faccode
[8708]147
148    @property
149    def department(self):
150        "Department of payee"
[8736]151        return self.context.student.depcode
[8708]152
[6875]153# Student online payments must be importable. So we might need a factory.
154class StudentOnlinePaymentFactory(grok.GlobalUtility):
155    """A factory for student online payments.
156    """
157    grok.implements(IFactory)
158    grok.name(u'waeup.StudentOnlinePayment')
159    title = u"Create a new online payment.",
160    description = u"This factory instantiates new online payment instances."
161
162    def __call__(self, *args, **kw):
163        return StudentOnlinePayment()
164
165    def getInterfaces(self):
[7811]166        return implementedBy(StudentOnlinePayment)
Note: See TracBrowser for help on using the repository browser.