source: main/waeup.kofa/trunk/src/waeup/kofa/applicants/payment.py @ 10009

Last change on this file since 10009 was 9984, checked in by Henrik Bettermann, 12 years ago

FCEOkene wants to hide the bed coordinates if maintenance fee is not yet paid. Thus we need additional property attributes which return the p_item (payment tickets) and the bed_coordinates attributes (bed tickets) by default and can be easily customized to hide this information in certain cases. bed_coordinates and p_item must be omitted on forms. The new display_ attributes are displayed instead.

All packages must now be adjusted.

The 'cost-benefit ratio' of these kinds of customizations is quite bad and we should think about declining such customization requests. However, I started customization and these are the changed made in the base package.

  • Property svn:keywords set to Id
File size: 4.1 KB
Line 
1## $Id: payment.py 9984 2013-02-24 08:29:24Z henrik $
2##
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"""
19Application fee payment.
20"""
21import grok
22import sys
23from hurry.workflow.interfaces import (
24    IWorkflowInfo, InvalidTransitionError)
25from zope.component.interfaces import IFactory
26from zope.interface import implementedBy
27from waeup.kofa.interfaces import MessageFactory as _
28from waeup.kofa.payments import OnlinePayment
29from waeup.kofa.payments.interfaces import IPaymentWebservice
30from waeup.kofa.applicants.interfaces import IApplicantOnlinePayment
31from waeup.kofa.utils.helpers import attrs_to_fields
32
33class ApplicantOnlinePayment(OnlinePayment):
34    """This is an online payment.
35    """
36    grok.implements(IApplicantOnlinePayment)
37    grok.provides(IApplicantOnlinePayment)
38
39    def __init__(self):
40        super(ApplicantOnlinePayment, self).__init__()
41        return
42
43    def doAfterApplicantPaymentApproval(self):
44        """Process applicant after payment was approved.
45        """
46        wf_info = IWorkflowInfo(self.__parent__)
47        try:
48            wf_info.fireTransition('approve')
49        except InvalidTransitionError:
50            msg = log = 'Error: %s' % sys.exc_info()[1]
51            return False, msg, log
52        log = 'payment approved: %s' % self.p_id
53        msg = _('Payment approved')
54        return False, msg, log
55
56    def doAfterApplicantPayment(self):
57        """Process applicant after payment was made.
58        """
59        wf_info = IWorkflowInfo(self.__parent__)
60        try:
61            wf_info.fireTransition('pay')
62        except InvalidTransitionError:
63            msg = log = 'Error: %s' % sys.exc_info()[1]
64            return False, msg, log
65        log = 'successful payment: %s' % self.p_id
66        msg = _('Successful payment')
67        return False, msg, log
68
69    def approveApplicantPayment(self):
70        """Approve payment and process applicant.
71        """
72        if self.p_state == 'paid':
73            return False, _('This ticket has already been paid.'), None
74        self.approve()
75        return self.doAfterApplicantPaymentApproval()
76
77ApplicantOnlinePayment = attrs_to_fields(
78    ApplicantOnlinePayment, omit=['display_item'])
79
80class PaymentWebservice(grok.Adapter):
81    """An adapter to publish applicant data through a webservice.
82    """
83    grok.context(IApplicantOnlinePayment)
84    grok.implements(IPaymentWebservice)
85
86    @property
87    def display_fullname(self):
88        "Name of  payee"
89        return self.context.__parent__.display_fullname
90
91    @property
92    def id(self):
93        "Id of payee"
94        return self.context.__parent__.applicant_id
95
96    @property
97    def reg_number(self):
98        "Reg number of payee"
99        return self.context.__parent__.reg_number
100
101    @property
102    def matric_number(self):
103        return ''
104
105    @property
106    def faculty(self):
107        return ''
108
109    @property
110    def department(self):
111        return ''
112
113# Applicant online payments must be importable. So we might need a factory.
114class ApplicantOnlinePaymentFactory(grok.GlobalUtility):
115    """A factory for applicant online payments.
116    """
117    grok.implements(IFactory)
118    grok.name(u'waeup.ApplicantOnlinePayment')
119    title = u"Create a new online payment.",
120    description = u"This factory instantiates new online payment instances."
121
122    def __call__(self, *args, **kw):
123        return ApplicantOnlinePayment()
124
125    def getInterfaces(self):
126        return implementedBy(ApplicantOnlinePayment)
Note: See TracBrowser for help on using the repository browser.